首页 > 代码库 > linux三剑客之sed

linux三剑客之sed

linux三剑客之sed


  sed命令是一个功能强大的流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,它会把当前处理的文本的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着sed命令会处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,直到文件末尾。需要注意的是,处理前后文件内容并没有改变,除非你使用重定向存储输出或使用特定的选项。


1、使用格式

    sed [option] ‘AdressCommand‘ FILE...


2、参数


[option]

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

    -f FILENAME:将指定命令保存至文件FILENAME中,从FILENAME文件中读取内容依次执行命令

    -i:修改源文件内容,慎用!!!

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

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

Adress

StartLine,EndLine:如 1,100

/RegExp/:/内部使用正则表达式/,如/^root/

/patter1/,/patter2/:第一次被模式1匹配到的行开始,到模式2匹配的行结束

LineNumber:指定的行

        .:当前行

        $:最后一行

StartLine+n:从指定行开始及其向后n行

Command

    a \STRING:在指定的行后面追加一行,内容为STRING,多行追加加"\"

d:删除符合条件的行

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

p:显示符合条件的行

r FILENAME:将指定文件FILENAME中内容添加至file文件指定行处

w FILENAME:将指定文件file指定行内容写入FILENAME文件,并保存


3、特殊用法(比较重要)


    sed ‘s/PATTER/STRING/修饰符‘ FILE:查找并替换(默认只替换每行中第一次被模式匹配到的字符串),其中"/"可以被其他特殊字符替代,但三个必须相同。如:‘s###‘、‘s@@@‘。


PATTER:想要查找的内容,支持正则表达式,加-r选项即可

STRING:替换为STRING,支持后向引用

    引用匹配到的串:

        将PATTER部分想要引用的串用"()"括起来

\1、\2...:引用匹配到的串,分别表示引用第1个(),第2个()...

    如:将l..e格式的字符后面加r: like-->liker、love-->lover,表示如下:

        sed -r ‘s#(l..e)#\1r#‘ FILE

修饰符:

    g:表示全局替换

i:表示忽略大小写


4、实用范例

# 创建包含下面内容的文件,后面的操作都会使用这个文件

[root@acer ~]# cat person.txt 
1,zhangsan,teacher
2,lisi,CEO
3,wangwu,student
4,zhaoliu,CEO
5,huangquan,student

1)追加行:在第4行后增加行

<br class="Apple-interchange-newline"><div id="inner-editor"></div>

[root@acer ~]# sed ‘4a \This line is newly added‘ person.txt
1,zhangsan,teacher
2,lisi,CEO
3,wangwu,student
4,zhaoliu,CEO
This line is newly added
5,huangquan,student


2)删除指定行:删除第3行到最后一行

[root@acer ~]# sed ‘3,$d‘ person.txt
1,zhangsan,teacher
2,lisi,CEO

3)不打印包含指定内容的行:打印不包含CEO的行

[root@acer ~]# sed ‘/CEO/d‘ person.txt 
1,zhangsan,teacher
3,wangwu,student
5,huangquan,student

4)打印包含指定内容的行:打印包含CEO的行

# 默认情况下会将包含CEO的行打印两次
[root@acer ~]# sed ‘/CEO/p‘ person.txt  
1,zhangsan,teacher
2,lisi,CEO
2,lisi,CEO
3,wangwu,student
4,zhaoliu,CEO
4,zhaoliu,CEO
5,huangquan,student

# 可以使用-n选项,不输出模式空间中的内容
[root@acer ~]# sed  -n ‘/CEO/p‘ person.txt 
2,lisi,CEO
4,zhaoliu,CEO

5)查找并替换为指定内容输出:将CEO替换为CTO

[root@acer ~]# sed ‘s#CEO#CTO#g‘ person.txt 
1,zhangsan,teacher
2,lisi,CTO
3,wangwu,student
4,zhaoliu,CTO
5,huangquan,student


 总之,sed命令是一个十分强大的文本搜索编辑命令,它可以与正则表达式、管道、重定向连用,实现强大的功能。


linux三剑客之sed