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命令是一个十分强大的文本搜索编辑命令,它可以与正则表达式、管道、重定向连用,实现强大的功能。
原文地址:http://zhiheren.blog.51cto.com/12120978/1860767