(1)命令格式及基本用法:
sed是stream editor的缩写。是一个非交互式上下文(context)编辑器,它的功能与vim差不多(删除、插入、替换、查找……),可以说是一个非交互的vim,特别合适用在脚本中处理文本文件。
sed命令的格式是sed options[-n,-e,] command file 或者
sed options -f script file例如
- [root@localhost ~]# echo "123"|sed 's/123/456/'
-
456
-
[root@localhost ~]#
以上是第一各用法。当要处理的命令很多的时候,可以把这些命令写到一个文件里,在用sed命令时,直接用-f选项调用。例如:
- [root@localhost ~]# cat a.txt
-
123456789
-
[root@localhost ~]# cat 123
-
s/123/aaa/
-
s/789/bbb/
-
[root@localhost ~]# sed -f ./123 a.txt
-
aaa456bbb
(2)命令选项代码
〈1〉替换标记
- [root@localhost ~]# cat a.txt
-
123456789
-
111111111
-
333333333
-
[root@localhost ~]# sed -n 's/1/a/gp' a.txt
-
a23456789
-
aaaaaaaaa
如上例s表示替换,后面接被替换字符与替换字符,/为分隔符(可以为其它符号如#、$、!等等),g表示替换所有找到的,如果没有加g,则只替换第一个被找到的。如下,第二行只有第一个“1”被找替换成“a”。
- [root@localhost ~]# sed -n 's/1/a/p' a.txt
-
a23456789
-
a11111111
选项-n表示不主动输出,p表示输出修改过的行,所以sed -n 's/1/a/gp'表示只输入替换过的行,否则
- [root@localhost ~]# sed 's/1/a/g' a.txt
-
a23456789
-
aaaaaaaaa
-
333333333
如上,连同没有被替换的第三行也会出现。
如果想把输出结果保存到文件,除了可以用重定向以外。可以另选项w,如
- [root@localhost ~]# sed -n 's/1/a/gpw b.txt' a.txt
-
a23456789
-
aaaaaaaaa
-
[root@localhost ~]# cat b.txt
-
a23456789
-
aaaaaaaaa
(3)作用数字地址
可能已经有网友注意点,前面用sed,都是对所有的行起作用,其实,sed命令可以大精确到具体哪一行,或者某个范围。
- [root@localhost ~]# cat a.txt
-
123456789
-
111111111
-
333333333
-
987654321
-
[root@localhost ~]# sed -n '1s/1/a/gpw b.txt' a.txt
-
a23456789
-
[root@localhost ~]# sed -n '2,4s/1/a/gpw b.txt' a.txt
-
aaaaaaaaa
-
98765432a
-
[root@localhost ~]# sed -n '1,$s/1/a/gpw b.txt' a.txt
-
a23456789
-
aaaaaaaaa
-
98765432a
上面例子分别表示只处理第一行,处理2到4行,处理1到最后一行。
(4)文本匹配模式(正则表达式)
- [root@localhost ~]# cat a.txt
-
123456789
-
111111111
-
333333333
-
987654321
-
[root@localhost ~]# sed -n '/^9.*1$/p' a.txt
-
987654321
如上例,从文件a.txt中找出以9开头,1结尾的行。
用正则表达式找出行后,可进一步处理:如下,找出以9开头,1结尾的行,并把其中的321替换成abc
- [root@localhost ~]# sed -n '/^9.*1$/s/321/abc/p' a.txt
-
987654abc
(5)组合命令
如果想同时进行多个替换,可以用";"号隔开如:
- [root@localhost ~]# sed -n 's/123/abc/p;s/321/cba/p' a.txt
-
abc456789
-
987654cba
如果想对特定的行(或多行)进行处理,可以用花括号把组合命令包括起来:
- [root@localhost ~]# sed -n '4{s/1/a/;s/3/b/p}' a.txt
-
987654b2a
- [root@localhost ~]# sed -n '/9/{s/1/a/;s/2/b/p}' a.txt
- ab3456789
- 9876543ba
阅读(2316) | 评论(0) | 转发(1) |