sed:Stream Editor,行编辑器:一次只处理一行文本,不会编辑修改原文件,每处理一行文本都会将文本复制到patternspace:模式空间中处理
用法:sed [option] ... 'script' inputfile ...
script:
'地址命令'
常用选项:
-n --quiet, --silent
不输出模式中的内容到屏幕
-e 多点编辑操作
-f /PATH/TO/SCRIPT_FILE 从指定的文件中读取编辑脚本
-r 使用扩展正则表达式
-i 原处编辑,修改源文件
地址定界:
1.不给地址:对全文进行处理
2.单地址:
#:指定的行
/parrert/:被模式所够匹配到的每一行
3.地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
4.~:步进
显示奇数行:
[root@node110 sed]# sed -n '1~2p' simple.txt
1-wordmatching using:the
3-wordmatching using:they
显示偶数行:
[root@node110sed]# sed -n '2~2p' simple.txt
2-wordmatching using:thethe
编辑命令:
d: 删除符合条件的行
[root@Testsed]# sed '/^proc/d' /etc/fstab #删除proc开头的行
[root@Testsed]# sed '/^$/d' /etc/fstab #删除空白行
p: 打印模式空间中的内容,打印模式空间中能够匹配的内容
[root@Testsed]# sed -n '/^proc/p' /etc/fstab #只输出能匹配的行
[root@Testsed]# sed '/^proc/d' /etc/fstab #与上面的显示相反
a\'text' 在每个符合条件的行后追加text文本(append),支持使用\n实现多行追加
[root@Testsed]# sed '/^proc/a \"#hellosed"' fstab #在匹配的行后追加一行
[root@Testsed]# sed '/^sysfs/a "#hellosed"\n#123' fstab #在匹配的行后追加多行
i\'text' 在每个符合条件的行前追加test文本(insert),支持使用\n实现多行追加
[root@Testsed]# sed '/^sysfs/i "#hellosed"\n#123' fstab
c\'text' change在每个符合条件的行替换为text的内容,可以使用单行或多行
[root@Testsed]# sed '/^sysfs/c "#hellosed"\n#123' fstab
w filename 将符合条件的内容另存为一个文件
[root@Testsed]# sed '/^proc/w sed_w' fstab
= 为模式空间中的行打印行号
[root@Test sed]# sed '/^proc/=' fstab
r/path/from/sofefile: 在文件插入指定文件的内容,
[root@Testsed]# sed '6r /etc/issue' fstab #在fstab文件的第6行后插入/etc/issue文件的内容
!取反操作:对地址定界取反
[root@Test sed]# sed -n '/^proc/!p' fstab
s///查找替换,可以使用其它分隔符s### s@@@
替换标记:
g:行内全局替换
i:忽略字母的大小写
p:显示替换成功的行
w/PATH/TO/SOMEFILE #将匹配替换后的结果显示在指定的文件中
[root@Testsed]# sed 's@^sysfs@Sysfs@' fstab #以sysfs开头的字符串替换为Sysfs
[root@node110sed]# sed 's@r..t@&er@' /etc/passwd #&符号引用前面正则匹配到的所有的内容
[root@node110sed]# sed -n 's@\(r..t\)@\1er@p' /etc/passwd #\1也是引用小括号内正则匹配到的所有内容
[root@node110sed]# sed -n 's@r..t@&er@p' /etc/passwd
高级编辑命令:
holdspace:保持空间
patternspace:模式空间
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间的内容追加到保持空间中
g:(get)从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加到模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配到的行的下一行至模式空间
N:追加匹配到的行的下一行至模式空间
d:删除模式空间中的行:
D:删除多行模式空间中的所有行
显示偶数行:
[root@node110sed]# cat simple.txt
1-wordmatching using:the
2-wordmatching using:thethe
3-wordmatching using:they
[root@node110sed]# sed -n 'n;p' simple.txt
2-wordmatching using:thethe
逆向显示文件内容:
[root@node110sed]# sed '1!G;h;$!d' simple.txt
3-wordmatching using:they
2-wordmatching using:thethe
1-wordmatching using:the
显示文件的后两行:
[root@node110sed]# sed '$!N;$!D' simple.txt
2-word matching using:thethe
3-wordmatching using:they
取文件的最后一行
[root@node110sed]# sed '$!d' simple.txt
3-word matching using:they
每行后加一个空白行:
[root@node110sed]# sed 'G' simple.txt
1-wordmatching using:the
2-wordmatching using:thethe
3-wordmatching using:they
将多个空白行合并成一个空白行
[root@node110sed]# sed '/^$/d;G' simple.txt
1-wordmatching using:the
2-wordmatching using:thethe
3-wordmatching using:they
取奇数行:
[root@node110sed]# sed 'n;d' simple.txt
1-wordmatching using:the
3-wordmatching using:they