sed¶
–stream editor for filtering and transforming text
–是一个非交互的流编辑器,过滤和改变文本文件的。
Contents
选项¶
-n 取消默认的输出 ,使用安静(silent)模式。 -e 允许多项编辑 (-e ‘定址 操作’ -e ‘定址 操作’ 或 ‘定址 操作; 定址 操作’) -r 支持扩展正则表达式 -i 直接修改原文件,在 -i 的后面加上一些其他的字符,会给原文件做一个备份。 -f 接sed 脚本文件
p|打印匹配行¶
打印匹配到root的行¶
[alvin@poppy ~]$ sed -n '/root/p' passwd
打印匹配到root的行到匹配到ftp的行之间所有的行¶
[alvin@poppy ~]$ sed -n '/root/,/ftp/p' passwd
打印除7至10行之外的所有行,!是取反¶
[alvin@poppy ~]$ sed -n '7,10!p' passwd
d|删除¶
删除包含root的行¶
[alvin@poppy ~]$ sed '/root/d' passwd
删除包含root到包含mail之间所有的行¶
[alvin@poppy ~]$ sed '/root/,/mail/d' passwd
s///替换¶
使用前面匹配到的内容¶
匹配替换时,&会变成起那么匹配到的内容,所以在下面的例子中,我们前面匹配所有内容,然后替换为#&就是#加上所有内容。
sed -in '160,164s/.*/#&/' $Setfiles
删除文件 text中第一列¶
sed -e 's/[^ ]* //' text
将每行第一个root替换成为alvin¶
[alvin@poppy ~]$ sed 's/root/alvin/' passwd
将所有的root都替换为alvin¶
[alvin@poppy ~]$ sed 's/root/alvin/g' passwd
将第一行所有的root替换为clear¶
[alvin@poppy ~]$ sed '1 s/root/clear/g' passwd
将第一行第二个root替换为clear¶
[alvin@poppy ~]$ sed '1 s/root/clear/2' passwd
删除所有行的第一个root¶
[alvin@poppy ~]$ sed ‘s/root//’ passwd
删除第二行第三个root¶
[alvin@poppy ~]$ sed ‘2 s/root//3’ passwd
将153和158行的#替换为空¶
sed -in '153,158s/#//' $Setfiles
r|读取一个文件里内容到¶
将文件file.txt里的内容读取到passwd的每一行¶
[alvin@poppy ~]$ sed 'r file.txt' passwd
将文件file.txt里的内容读取到passwd的第一行¶
[alvin@poppy ~]$ sed '1r file.txt' passwd
a|在匹配的行的下面添加内容¶
在第4行的下面添加clear¶
[alvin@poppy ~]$ sed '4a clear' passwd
在最后一行的下面添加clear¶
[alvin@poppy ~]$ sed '$a clear' passwd
在匹配到nologin的行的下面添加clear¶
[alvin@poppy ~]$ sed '/nologin/a clear' passwd
i|保存修改文件¶
修改一个文件时,备份源文件¶
[root@cl210controller ~]# cat 2.txt
a b c d e
[root@cl210controller ~]# sed -i.bak 's/c/666/' 2.txt
[root@cl210controller ~]# cat 2.txt
a b 666 d e
[root@cl210controller ~]# cat 2.txt.bak
a b c d e
在第一行上面添加clear¶
[alvin@poppy ~]$ sed '1i clear' passwd
在匹配到nologin的行的上面添加clear¶
[alvin@poppy ~]$ sed '/nologin/i clear' passwd
c|替换匹配到的行¶
将包含nologin的行替换为clear¶
[alvin@poppy ~]$ sed '/nologin/c clear' passwd
将第2行替换成clear¶
[alvin@poppy ~]$ sed '2c clear' passwd
分组替换¶
在做替换时,如果将前面的用户用括号()包裹起来了,那么可以在后面调用,第一个括号就是1,使用分组时前面加-r参数。
echo 'CONFIG_CINDER_KS_PW=sda3d34dd235d'|sed -r 's/(.+_PW)=[0-9a-z]+/\1=redhat/'
匹配行替换¶
“”中第一列为匹配内容,第二列s表示要进行替换,第三列aa表示匹配aa,第四列6666表示将匹配到的aa替换为6666
[root@localhost ~]# cat 1
aaa
bbb
ccc
[root@localhost ~]# sed "/aa/s/aa/66666/" 1
66666a
bbb
ccc
删除匹配行到最后一行¶
sed -i '/label linux/,$d' myiso/isolinux/isolinux.cfg