sed,Stream EDitor 流编辑器,废话不多说,你懂得.



工作机制:

从文件中分别取出每一行至模式空间(pattern)进行编辑处理,并输出至屏幕.

命令格式:

sed [option] ‘script’ file_name



option:

-n,--quient,--silent   ,静默模式,不输出模式空间中的内容.

-i,--in-place       ,源文件编辑.

-e      ,多点编辑,支持多个编辑命令.

sed -e ‘s/UUID/uuid/’  -e ‘s/#//’  fstab

-f  file_name   ,指定一个编辑命令文件,at-f类似.

-r,--regexp-extended        ,支持扩展正则表达式,默认为基本正则表达式.




         Script的组成为:地址定界编辑命令


                   地址定界:

1)    单个地址:   #                   数字,表示指定的单行进行编辑

/pattern/                          表示对被此模式匹配到的行进行编辑


2)    地址范围:     #,#                  数字,表示对从#到第#行结束的行进行编辑

#,+#                              数字,表示对从第#行开始,到+#行结束的行进行

/pattern1/,/pattern2/     表示对被第一个/pattern1/匹配的行开始到第一个被/pattern2/匹配的行结束的行进行编辑


                   编辑命令:

                            d      ,表示删除符合条件的行

                            p       ,表示打印符合条件的行

                            a       \text                   表示在符合条件的行后追加text文本信息,支持多行 \n

                            I        \text                   表示在符合条件的行后插入text文本信息,支持多行 \n

                            C       \text                   表示把符合条件的行更改为text,注意:更改的整行,区别s

                            w      /some/to/file_name       把符合条件的行写入到指定文件中

                            r        /some/to/file_name         把文件写入到符合条件的行前。

                                            sed  ‘1r /etc/issue’  /etc/fstab                       #issue文件写入到fstab之前

             

             =       显示模式空间中的行号

                            !        对地址空间进行取反

                            s///            查找替换,支持s@@@, s###

                                     替换标记:

                                               g       表示替换

                                               &      表示后向应用整体

                                               sed  ‘s/r..t/&er/’ /etc/passwd                #查找字符”r..t”并在尾部加er




         练习:

1)              删除/etc/grub.conf文件中所有以空白字符开头的行的行首空白字符。

sed  ‘s/^[[:space:]]\+//’ /etc/grub.conf

2)              删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

           Sed ‘s/^#[[:space:]]\+//’ /etc/fstab

3)              Echo一个绝对路径,取基名与目录名。

目录名:         echo “/etc/sysconfig/123”   |  sed  ‘s/[^/]\+$//’

基名:              echo “/etc/sysconfig/123”   |  sed  ‘s@^/.*/@@’

高级命令:

         h                hold,将模式空间中的内容覆盖至保持空间

         H                将模式空间中的内容追加至保持空间

g                get,将保持空间中的内容覆盖至模式空间

G                将保持空间中的内容追加至模式空间

x                 将模式空间与保持空间中的内容交换

n               将符合条件的行的下一行覆盖至模式空间

N                将符合条件的行的下一行覆盖至模式空间,此时模式空间存在多行

d                删除模式空间中的单行

D                删除模式空间中的多行

p                打印符合条件的行

典型应用:

         Sed  -n ‘n;p’   file              #显示偶数行

         Sed  ‘n;d’                 file             #显示奇数行

         Sed  ‘1!G;h;$!D’    file             #将文件倒序输出,类似于tac

         Sed   ‘$!N;$!D’          file             #显示文件的倒数两行

         Sed  ‘G’           file             #在每行之后插入空白行

         Sed  ‘/^$/d;G’                  file             #将多行空白替换为一行