赞
踩
-e:允许多个编辑命令,多个编辑命令之间使用分号 ;`分隔。
-n:禁止自动打印模式空间的内容,只有经过 p 命令显式打印的内容才会输出。
-i:直接在源文件上进行修改,而不是将结果输出到标准输出。需要注意的是,-i 选项会直接修改源文件,慎用。
-r:或 --regexp-extended:启用扩展的正则表达式语法,可以使用更多的元字符和特殊字符。
-f:从指定的文件中读取编辑命令,而不是在命令行中指定。
-s:或 --separate:将输入的多个文件视为独立的文件,分别处理,而不是将它们合并为一个流进行处理。
命令s:替换掉匹配的内容,通常可以搭配正则表达式
[root@controller ~]# cat bb
hello world mhy
[root@controller ~]#
[root@controller ~]# sed -ri 's/mhy/op/' bb
[root@controller ~]#
[root@controller ~]# cat bb
hello world op
[root@controller ~]#
文本中的mhy已经成功替换成了op
命令s配合字符&使用
[root@controller ~]# sed -ri 's/op/& mhy/' bb
[root@controller ~]#
[root@controller ~]# cat bb
hello world op mhy
[root@controller ~]#
&字符替换的是op那一行的内容,并不是hello world op中的某一个内容.
命令d:用于删除匹配到的文本行。
[root@controller ~]# cat aa
11111111
22222222
33333333
[root@controller ~]#
[root@controller ~]# sed '1d' aa
22222222
33333333
[root@controller ~]#
执行后的效果显示删除了第一行,其实并没有删除因为sed后面没有带上-i
删除匹配到的那一行
[root@controller ~]# cat aa
11111111
22222222
33333333
[root@controller ~]#
[root@controller ~]# sed -ri '/^2/d' aa
[root@controller ~]#
[root@controller ~]# cat aa
11111111
33333333
[root@controller ~]#
sed后面带上-i后,匹配到以2开头的那一行已经删除,可以先用-r查看一下执行效果再确认是否删除。
命令a:向匹配行后面插入内容,会在匹配行的下一行输出
[root@controller ~]# cat aa
11111111
33333333
44444444
55555555
[root@controller ~]#
[root@controller ~]#
[root@controller ~]# sed -ri '1ahello world' aa
[root@controller ~]# cat aa
11111111
hello world
33333333
44444444
55555555
[root@controller ~]#
在第一行的下面一行已经将hello world追加成功,也可以在里面追加空格但需要在空格前面加上 \ 进行转义,否则无法追加。
命令i:向匹配行前插入内容,会在匹配行的上一行输出
[root@controller ~]# sed -ri '/^4/i\ hello world' aa
[root@controller ~]#
[root@controller ~]# cat aa
11111111
hello world
33333333
hello world
44444444
55555555
[root@controller ~]#
匹配到4开头的那一行的前面一行已经成功加入了空格和内容,与命令a的用法相似。
命令c:更改匹配行的内容
[root@controller ~]# cat aa 11111111 hello world 33333333 hello world 44444444 55555555 [root@controller ~]# [root@controller ~]# sed -ri '4chello' aa [root@controller ~]# [root@controller ~]# cat aa 11111111 hello world 33333333 hello 44444444 55555555 [root@controller ~]#
第二个hello world那一行已经更改成hello,并且前面的空格也一并更改了。
命令y:命令会将文本中匹配到的字符按照对应的位置进行替换
[root@controller ~]# cat bb
hello world op mhy
[root@controller ~]#
[root@controller ~]# sed -ri 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' bb
[root@controller ~]#
[root@controller ~]# cat bb
HELLO WORLD OP MHY
[root@controller ~]#
文本中的小写字母全部转换成大写字母,也可以将单个字母的大小写进行转换.
命令p:打印出匹配的内容,通常与-n选项和用
[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]#
[root@controller ~]# sed -n '/hello/p' aa
hello world
hello
[root@controller ~]#
由于使用了-n只将匹配到的内容打印了出来,没有使用默认的打印功能。
命令=:打印出文本中每一行的行号
[root@controller ~]# sed '=' aa
1
11111111
2
hello world
3
33333333
4
hello
5
44444444
6
55555555
[root@controller ~]#
同样可以将匹配到的行的行数打印出来
[root@controller ~]# sed '/^hello/=' aa
11111111
2
hello world
33333333
4
hello
44444444
55555555
[root@controller ~]#
命令n:表示下一行,可以搭配命令d使用将匹配到的空行删除
[root@controller ~]# cat aa
11111111
hello world
33333333
[root@controller ~]#
[root@controller ~]# sed -ri world/{n;/^$/d}' aa
[root@controller ~]# cat aa
11111111
hello world
33333333
[root@controller ~]#
命令q:用于在处理文本时,遇到指定条件后退出程序
[root@controller ~]# cat aa
11111111
hello world
33333333
hello
44444444
55555555
[root@controller ~]#
[root@controller ~]# sed '2q' aa
11111111
hello world
[root@controller ~]#
打印2行退出,也可以打印多行退出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。