linux学习之sed、awk



Ⅰ、sed

   sed:stream editor 流编辑器,是用来查找替换删除文件中特定对象的。

   工作机制:每次读取一行文本到“模式空间[pattern space]”中,在模式空间中完成处理;然后将处理的结果输出或者保存;


  1、 语法:

    sed [OPTTION]....{script} [input filename]...

       [OPTTION] 选项:

                -r:表示支持扩展正则表达式

                -n:表示支持静默模式

                -e script1 -e script2 ... 可以指定多个script

                -i:直接修改源文件

                -f /path/to/filename:从指定的路径读取script运行

    sed支持基本正则表达式,其元字符有

       字符匹配:.,[],[^]

       次数匹配:*,\?,\+,\{m\},\{m,n\}

       位置锚定:^,$,\<,\>

       分组及引用:\(\),\1,\2,......

       多选一:x|y|z


 2、  sed的script内容包括地址定界和编辑命令

      地址定界

       #:指定行

       $:最后一行

       /regexp/:任何能被regexp匹配到的行

      \%regexp%:表示任何能被regexp匹配到的行,\只是对%做转义使用的

      /regexp/|:表示在匹配中忽略大小写,

     \%regexp%|:表示的意思同上,\只是对%做转义使用的

     startline,endline:表示在开始行和结束行之间的内容作匹配; 有以下几种特殊情况

       #,/regexp/:从第#行开始,到第一次匹配到regexp的行

       x,y:从第x行到第y行

      /regexp1/,/regexp2/:表示从第一次被regexp1匹配到的行,到第一次被regexp2匹配到的行

      x,+y;表示从x行开始,到下面的x+y行

     first`step:表示从指定行开始,以step步进行数递增的所有行


   编辑命令:

    d:删除模式空间中的行

    =:显示行号

    a \text:在匹配到的地方附加text

    i \text:插入text,支持多行插入

    c \text:用text替换匹配到的行

    p:打印模式空间中的行

    s /regexp/sometext/:将匹配到的内容替换为sometext;q可以支持全局替换

    w /path/to/filename:另存为filename的文件

    r /path/from/filename:在文件的指定位置插入另一个文件的内容。


3、高级命令


h:用模式空间中的内容覆盖保持空间的内容;

H:把模式空间中的内容追加至保持空间中内容的后面;

g:从保持空间中取到其内容,并将其覆盖模式空间中的内容;

G:从保持空间中取到其内容,并将其追加在模式空间中的内容的后面;

x:把保持空间和模式空间中的进行交换;

n:读取匹配到的行的下一行至模式空间;(会覆盖模式空间中的原有内容);

N:读取匹配到的行的下一行至模式空间,追加在模式空间中原有内容的后面;

d:删除模式空间中的内容;

D:删除多行模式空间中的首行;


注意:命令功能可使用!取反;分号可用于分隔脚本;