sed基本用法


sed:Stream EDitor(流编辑器)

  行编辑器

sed:模式空间

默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕


sed基本用法

sed [options] 'AddressCommand' file...
    [Options]

-n   静默模式,不再默认显示模式空间中的内容

-i    直接修改原文件

-e SCRIPT -e SCRIPT:可以同时执行多个脚本

-f /PATH/TO/SED_SCRIPT

       sed -f /path/to/scripts file (让sed执行scripts中的编辑指令)

-r   表示使用扩展正则表达式

Address:

   1、StartLine,EndLine

       如:1,100

       $:表示最后一行

   2、/RegExp/

        如:/^ROOT/

   3、/pattern1/,/pattern2/

        第一次被pattern匹配到的行开始,至第一次被pattern2匹配到的行结束,这和中间的所有行

   4、LineNumber

        指定的行

   5、StartLine,+N

        从StartLine开始,向后的N行

Command:

=:   显示行号

n:   读取下一个输入行,用下一个命令处理新的行而不是用第一个命令

     sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。

d:   删除符合条件的行

p:   显示符合条件的行

a  \string:在指定的行后面追加新行,内容为string

                 \n:可以用户换行

i  \string:在指定的行的前面追加新行,内容为string

r  FILE: 将指定的文件内容添加至符合条件的行处

w  FILE:将指定的范围内的行另存至指定的文件中

s/pattern/string/修饰符(s///):查找并替换,默认只替换每行中的第一次被模式匹配带的字符串

        修饰符:

g: 全局替换

 i: 忽略字符大小写

   s///:s###,s@@@

    &  引用模式匹配到的整个字符串

用法示例:

 删除/etc/grub.conf文件中行首的空白符

[root@localhost ~]# sed -r 's/^[[:space:]]+//g' /etc/grub.conf

 替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5

[root@localhost ~]# sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@' /etc/inittab

 删除/etc/inittab文件中的空白行

 [root@localhost ~]# sed '/^$/d' /etc/inittab

 删除/etc/inittab文件中开头的#号

[root@localhost ~]# sed "s/^#//g" /etc/inittab

 删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符

[root@localhost ~]# sed -r 's/^#[[:space:]]+//g' /etc/inittab

 删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#

 [root@localhost ~]# sed -r 's/^[[:space:]]+#//g' /etc/inittab

 取出一个文件路径的目录名称

[root@localhost ~]# echo '/etc/rc.d/' | sed -r 's@^(/.*/)[^/]+/?@\1@g'?

 显示file1中空白行并显示行号

[root@localhost ~]# sed -n '/^$/{=;p}' file1.txt


 

你可能感兴趣的:(编辑器,sed用法)