第四章 第三节 awk、sed 3.23

sed:
  1、概述
   (1)模式空间:是处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”
   (2)sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
   (3)文件内容并没有改变,除非你使用重定向存储输出
  2、定址
           该地址用数字构成,用逗号分隔的两个行数。
               如1,3表示1,2,3行,美元符号($)表示最后一行。
           范围可以通过数据,正则表达式或者二者结合的方式确定 。
  3、定界
          使用“:”“|”“@”“#”等进行分隔
  4、命令
          调用sed命令有两种形式
                       sed [-nefri] 'command' file(s)
                       sed [-nefri] -f 脚本 file(s)
      (1)常用选项
           -n(重要)∶使用安静(silent)模式。只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
           -r(重要)∶sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
           -i(重要)∶直接修改读取的档案内容,而不是由屏幕输出。
           -e∶直接在指令列模式上进行 sed 的动作编辑;
           -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行filename 内的sed 动作;
       (2)常用命令
            a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
            c:取代, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行
            d:删除,d 后面通常不接任何内容
             i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
             p:列印,即将某个选择的内容打印出来。通常 p 会与参数 sed -n 一起运作
             s:替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 就是啦
        (3)替换一行中的某部分
                    格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式)
awk:
  1、概述
         相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理。 因此,awk 相当的适合处理小型的数据数据处理
  2、工作原理
            awk 'BEGIN{ commands } pattern{ commands } END{ commands }
         第一步:执行BEGIN{ commands }语句块中的语句,只执行一次;
         第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands}语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
         第三步:当读至输入流末尾时,执行END{ commands }语句块,只执行一次。
  3、内置变量
         $n 当前记录的第n个字段 
         $0 这个变量包含执行过程中当前行的文本内容。
         FNR 同NR,但相对于当前文件。
         FS 字段分隔符(默认是任何空格)
         NF 表示字段数,在执行过程中对应于当前的字段数
         NR 表示记录数,在执行过程中对应于当前的行号
         OFS 输出字段分隔符(默认值是一个空格)
         RS 记录分隔符(默认是一个换行符)
         ORS 输出记录分隔符(默认值是一个换行符) 
   4、
      (1)算术运算符
                  * 乘 、/ 除 、& 求余 、^  *** 求幂
              所有用作算术运算符进行操作 ,操作数自动转为数值,所有非数值都变为0
      (2)正则运算符
                  ~~!  匹配正则表达式和不匹配正则表达式
  5、awk高级输入输出
       (1)读取下一条记录
          awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。net语句一般用于多行合并
        (2)awk只允许用重定向的>、>>将结果输出到一个文件
  6、设置字段定界符
         默认字段定界符为空格,可以使用【-F “定界符”】明确指定一个定界符
         在BEGIN语句块,可以使用OFS=“定界符”设置输出字段的定界符
  7、条件判断语句
                    if(表达式)                       if(表达式)
                     {语句体1}                            语句1
                    else if(表达式)                else
                      {语句体2}                             语句2
                    else
                      {语句体3} 
               每条 语句体 后面可以用;分号结尾
   8、循环语句
          (1)while循环
                           while(表达式)
                                {语句}
           (2)for循环
                     for(变量 in 数组)            for(变量;条件;表达式)
                          {语句}                               {语句}
           (3) do  while循环
                            do
                             {语句}while(条件)

数组:
   1、读取数组的值
             { for(item in array) {print array[item]}; } #输出的顺序是随机的
             { for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度
   2、返回数组的长度
       (1)字符串
                    length返回字符串以及数组长度,
                    split进行分割字符串为数组,也会返回分割得到数组长度。
        (2)asort对数组进行排序,返回数组的长度

猜你喜欢

转载自blog.csdn.net/caojm0/article/details/79691290