sed被称为linux文本处理的三剑客之一。

    sed的工作机制是对文本按照模式的规定进行逐行的进行操作,但是默认情况下sed不会修改原文件(可以添加参数来修改原文件),因为sed在处理文本的时候会创建自己的模式空间,因此,在对文本处理之前会逐行的将文本内容读入到其模式空间当中,然后在模式空间中再根据匹配条件对这一行的内容做相应的操作。另外,sed同时还提供另外一个空间模式(我们暂称为保持空间),保持空间用来读取模式空间中的内容,然后在根据命令对其做相应的操作。其实保持空间就是sed为了处理模式空间中的文本而提供的一个数据中转站。

linux文本编辑三剑客之sed_sed命令


下面就是sed的常用命令:

 sed: sed  [OPTION]... ‘sed脚本’ [input-file]..

   常用选项:

   -n:静默模式,不输出模式空间的内容到屏幕

   -e:多点编辑,可实现对多个文件同时处理

   -f:/path/from/script_file:从指定文件中读取编辑脚本(脚本中只需要写脚本命令,不需要写sed)

      例: [root@localhost tmp]# cat ss

            s/aaa/hello/g


   -r:支持使用扩展正则表达式(sed默认支持基本正则表达式):

   -i :直接修改原文件

   地址定界:

   1、不给地址,对全文中的每一行进行处理

   2、单地址,

       #,表示指定特定的行

       /patter/ :被次模式所能匹配的每一行

   3、地址范围:

#,#  指明第几行到第几行

#,+n 指明第几行及其后面几行

/patter1/,/patter/ 指明从patter1匹配到的行开始到patter2匹配到的行结束

                #,/patter1/ 指明从第几行开始到第一次被模式匹配到的行之间的所有行

    4、~:表示步进

   例:1~2 表示显示奇数行

       2~2 表示显示偶数行

  常用编辑命令;

d :删除

p :显示模式空间中被模式匹配到的行

a \text :append,后面追加文本,支持\n追加行添加

i \text :insert,前面插入文本,支持\n插入多行

c \text :change,替换行伪单行或多行文本

w /path/to/filename :将匹配到的行保存到某个指定文件中

r /path/from/filename :读取指定文件的文本流至匹配到的行的行尾

= :为模式空间的行打印行号

!:取反条件,例:sed “/^UUID/!d" /etc/fstab

s///g:支持使用其他分割符, s@@@,s###,

g行内表示全局替换

p:显示替换成功的行

w /path/to/somefile :将替换成功后的结果保存至文件中


高级编辑命令:(用在模式空间和保持空间中的数据交换的命令)

h:把模式空间中的内容覆盖至保持空间中

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

g:从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x:把模式空间中的内容与保持空间中的内容进行互换

n:读取匹配到的行的下一行至模式空间

N:追加匹配到的行的下一行至模式孔家

d:删除模式空间中的行

D:删除多行模式空间中的所有行

例:

sed 's/r..t/&er/' file :  &表示替换前面模式匹配到的所有内容 

    例:[root@localhost ~]# sed 's/^[[:space:]]*//' /boot/grub/grub.conf

sed -n 'n;p' file :显示偶数行

sed '1!G;h;$!d' file :逆向显示文件内容

sed '$!N;$!D' file 取出文件后两行

sed '$!d' 取出文件最后一行

sed 'G' file:

sed '/^$/d;G' file 将多个空白行合并为一个空白行

sed 'n;d' file :显示奇数行

sed  -n '1!G;h;$p' file :逆向显示文件中的每一行


取路径名

sed -r 's@(/.*/)[^/]+/?@\1@'

sed -r 's@(/.*)+[^/]/?(.*)@\1@'

sed 's@[^/]\+/\?$@@'

取路径基名

sed -r 's@(/.*/)([^/]+/?)@\2@'

sed -r 's@(/.*)+([^/]/?)@\2@'