标签:sed命令的使用
sed:流编辑器: sed是一种在线编辑器,他一次只能处理一行内容,在处理文件时,把当前处理的行存储到临时缓冲区,我们称为 模式空间 ,接着sed会处理模式空间中的文本,然后发送到标准输出,如果匹配不成功,则默认发送到标准输出,然后处理下一行,直到文件末尾。
sed格式:
sed [OPTION]... 'script' [input-file]...
option:
-n, --quiet, --silent:对于不能被PATTERN匹配的行,不发往标准输出;
[root@localhost ~]# sed 'p' b.txt #'p' 用来标准输出 aaaa aaaa bbbb bbbb aaaa aaaa cccc cccc dddd dddd [root@localhost ~]# sed -n 'p' b.txt aaaa bbbb aaaa cccc dddd
-e script, --expression=script:多条件编辑;
-f script-file, --file=script-file:从指定的script-file中读取脚本内容再编辑;
我们编辑a.txt的内容为 n [root@localhost ~]# sed --file=a.txt b.txt aaaa bbbb aaaa cccc dddd
注意:script-file最好使用绝对路径来指定;
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑源文件;
r, --regexp-extended:可以使sed支持扩展正则表达式;
script:AddressesCommand
Addresses:地址定界
1.空地址:表示对指定文件的所有行进行编辑处理;
2.单地址:sed对于能够匹配该地址的唯一一行进行处理;
#:表示指定行号的那行;
[root@localhost ~]# sed -n '2p' b.txt bbbb
/PATTERN/:能够被PATTERN匹配的所有行 ;
[root@localhost ~]# sed -n '/aaaa/p' b.txt aaaa aaaa
$:表示指定文件的最后一行;sed不支持$-1;
[root@localhost ~]# sed -n '$p' b.txt dddd
3.地址范围:
addr1,addr2:addr1和addr2都表示行号,从addr1行开始到addr2行结束的中继的所有行,包括addr1和addr2;
[root@localhost ~]# sed -n '1,2p' b.txt aaaa bbbb
first~step:first和step都数字,从first行开始,以step为步长,所经过的所有行;例如:1~2或2~2
[root@localhost ~]# sed -n '1~2p' b.txt aaaa aaaa dddd
addr1,+N:从addr1行开始,向后查找N行,包括addr1行;
[root@localhost ~]# sed -n '1,+2p' b.txt aaaa bbbb aaaa
addr1,~N:从addr1行开始,向后查找addr1*N行,包括addr1行;
[root@localhost ~]# sed -n '1,~4p' b.txt aaaa bbbb aaaa cccc
/PATTERN1/,/PATTERN2/:
从被PATTERN1第一次匹配的行开始,到被PATTERN2第一次匹配的行结束;继续向后找第二次匹配的行,第三次匹配的行,...
[root@localhost ~]# sed -n '/^aa/,/^bb/p' b.txt aaaa bbbb aaaa cccc bbbbb
Command:
=:显示被PATTERN匹配的行的行号;
a \text:在被模式匹配的行之后追加text的内容;支持使用"\n"换行,从而实现追加多行信息;
[root@localhost ~]# sed '1a \shanchu' b.txt aaaa shanchu bbbb aaaa cccc dddd aaaa cccc bbbbb
在第一行后面一行添加shanchu语句
i \text:在被模式匹配的行之前插入text的内容;支持使用"\n"换行,从而实现插入多行信息;
c \text:将被模式匹配的行直接修改为text的内容;支持使用"\n"换行,从而实现修改原内容为多行信息;
[root@localhost ~]# sed '1c \shanchu' b.txt shanchu bbbb aaaa cccc dddd aaaa cccc bbbbb 将第一行修改为shanchu
d:在模式空间中删除被模式匹配的行;
注意:一般在使用d命令时,不建议使用-n选项;
将第一行删除 [root@localhost ~]# sed '1d' b.txt bbbb aaaa cccc dddd aaaa cccc bbbbb 若添加-n选项则无法看到输出结果 [root@localhost ~]# sed -n '1d' b.txt [root@localhost ~]#
p:将模式空间中被模式匹配的行发送到标准输出;
注意:一般在使用p命令时,建议使用-n选项;
w filename:filename可以是一个相对路径,也可以是一个绝对路径;w命令将模式空间中被PATTERN匹配的行,存储到指定的文件中;
注意:一般在使用w命令时,建议使用-n选项;
r filename:filename可以是一个相对路径,也可以是一个绝对路径;r命令将指定的文件内容添加至被PATTERN匹配的行的后面;
!Command:在模式空间中被PATTERN匹配的行,不执行Command;相反,没有被PATTERN匹配的行,会执行Command;
s///:查找并替换,分隔符可以随意更换,但必须保持一致;s@@@, s###, s''', ...
s/regexp/replacement/[control]
regexp:正则表达式,也就是PATTERN,计划查找并替换的内容就是能够被regexp匹配的内容;
replacement:要替换的结果,纯字符串;
支持后向引用:
s/\(string\)/&/
s/\(string\)/\1/
替换:: [root@localhost ~]# sed '1s/^aa/ww/' b.txt wwaa bbbb aaaa cccc dddd aaaa cccc bbbbb 将第一行行首的aa修改为ww
高级编辑命令:
h:将模式空间中的内容存储到保持空间中,并覆盖保持空间中原有内容;
H:将模式空间中的内容存储到保持空间中,并追加至原有内容之后;
g:从保持空间取出数据存储到模式空间中,并覆盖模式空间的原有内容;
G:从保持空间取出数据存储到模式空间中,并追加至原有内容之后;
x:将模式空间中的内容与保持空间中的内容交换;
n:读取被PATTERN匹配到的行的下一行,覆盖到模式空间;
N:读取被PATTERN匹配到的行的下一行,追加到模式空间;
D:删除模式空间中的所有行;
标签:sed命令的使用
原文地址:http://blog.51cto.com/wangchaode/2055956