1.1 功能说明
stream editor 流编辑器,实现对文件的增删改替换查
1.2 语法格式
sed [OPTION]... {script-only-if-no-other-script}[input-file]...
sed –n ‘/过滤内容/’处理的命令 文件
sed –i ‘s#被替换内容#替换内容#g’ 文件
参数 | 简解 |
-n | 取消默认输出 |
-i | 改变文件内容 |
-r | 不用转义,去掉马甲 |
-e | 允许多项编辑 |
1.3 实践操作
实例1-1
问题:打印出oldboy.txt中的oldboy字符串
命令:sed –n ‘/oldboy/’poldboy.txt
代码
[root@ben-test ~]# sed -n '/oldboy/'p oldboy.txt
oldboy
说明:p 表示打印
实例1-2
问题:打印出ett.txt中20—30行的内容
命令:sed –n’20,30’p ett.txt
代码
[root@ben-test ~]# sed -n '20,30'p ett.txt
20
21
22
23
24
25
26
27
28
29
30
说明:此处’20,30’表示20至30行
实例1-3
问题:把oldboy.txt中的oldboy删除,打印出内容
命令:sed –i ‘/oldboy/’doldboy.txt
代码
[root@ben-test ~]# sed -i '/oldboy/'d oldboy.txt
[root@ben-test ~]# cat oldboy.txt
test
liyao
说明:d 表示删除输出
-i 表示改变文件内容,如果不加-i参数,只打印删除后的内容,而没有真正改变文件中的内容
实例1-4
问题:把oldboy.txt中的test替换成oldboy
命令:sed –i‘s#test#oldboy#g’ oldboy.txt
代码
[root@ben-test ~]# cat oldboy.txt
test
liyao
test
[root@ben-test ~]# sed -i 's#test#oldboy#g'oldboy.txt
[root@ben-test ~]# cat oldboy.txt
oldboy
liyao
oldboy
说明:s查找并替换,用一个字符串替换另一个字符串
g(global)与s联合使用时,表示对当前行全局替换
#是分隔符号,可以用/@等替换
实例1-5
问题:如何过滤出已知当前目录下/root中的所有一级目录(不包含var目录下面的目录及隐藏目录,即只能是一级目录)
命令:ls –l /root|sed –n ‘/^d/’p
代码
[root@ben-test ~]# ls -l /root |sed -n '/^d/'p
drwxr-xr-x 2 root root 4096 Sep 15 07:03 aa
drwxr-xr-x 3 root root 4096 Sep 15 03:34data
drwxr-xr-x 12 root root 4096 Sep 15 07:18test
实例1-6
问题:把/root/data目录中含有oldboy字符的文件,都把oldboy替换成oldgirl
命令1:sed –i ‘s#oldboy#oldgirl#g’ `grep–lr oldboy /root/data`
代码
[root@ben-test ~]# sed -i 's#oldboy#oldgirl#g'`grep -lr oldboy /root/data`
[root@ben-test ~]# grep -lr oldboy /root/data
[root@ben-test ~]# grep -lr oldgirl /root/data
/root/data/a.sh
/root/data/test/aa.txt
命令2:sed –i ‘s#oldboy#oldgirl#g’ `find/root/data –type f –name “*”`
代码
[root@ben-test ~]# sed -i 's#oldboy#oldgirl#g'`find /root/data -type f -name "*"`
[root@ben-test ~]# grep -lr oldboy /root/data
[root@ben-test ~]# grep -lr oldgirl /root/data
/root/data/a.sh
/root/data/test/aa.txt
实例1-7
问题:删除oldboy打印oldboy.txt中的内容,同时把liyao替换成oldgirl
命令:sed –e ‘/oldboy/’d–e ‘s#liyao#oldgirl#g’ /root/oldboy.txt
代码
[root@ben-test ~]# sed -e '/oldboy/'d -e's#liyao#oldgirl#g' oldboy.txt (没有改变文件内容)
oldgirl
[root@ben-test ~]# cat oldboy.txt
oldboy
liyao
oldboy
说明:如果需要改变文件内容,如下
sed-e '/oldboy/'d –i -e 's#liyao#oldgirl#g' –i /root/oldboy.txt
实例1-8 追加内容到指定行后
文本内容如下,person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
代码
[root@ben-test ~]# sed '2a 106,dandan,CSO'person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO <== 插入内容
103,Alex,COO
104,yy,CFO
105,feixue,CIO
说明:参数a是追加文本到指定行后,2a表示把内容追加到第二行的下一行
实例1-9 插入文本到指定行前
代码
[root@ben-test ~]# sed '2i 106,dandan,CSO'person.txt
101,oldboy,CEO
106,dandan,CSO <== 插入内容
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
说明:参数i是插入文本到指定行前,2i表示把内容插入到第二行的上一行
实例1-10 多行内容插入
代码
[root@ben-test ~]# sed '2a 106,dandan,CSO\n107,bingbing,CCO'person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
或
[root@ben-test ~]# sed '2a 106,dandan,CSO \ <== \符号是进入换行编辑
> 107,bingbing,CCO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
说明:\n是换行符
注意:sed软件可以对单行或多行进行处理。如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
用法:n1[,n2]{sed-commands}
地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。
例子:
10{sed-commands} 对第10行操作
10,20{sed-commands} 对10到20行操作,包括第10,20行
10,+20{sed-commands} 对10到30(10+20)行操作,包括第10,30行
1~2{sed-commands} 对1,3,5,7,……行操作
10,${sed-commands} 对10到最后一行($代表最后一行)操作,包括第10行
/oldboy/{sed-commands} 对匹配oldboy的行操作
/oldboy/,/Alex/{sed-commands} 对匹配oldboy的行到匹配Alex的行操作
/oldboy/,${sed-commands} 对匹配oldboy的行到最后一行操作
/oldboy/,10{sed-commands} 对匹配oldboy的行到第10行操作,注意:如果前10行没有匹配到oldboy,sed软件会显示10行以后的匹配oldboy的行,如果有。
1,/Alex/{sed-commands} 对第1行到匹配Alex的行操作
/oldboy/,+2{sed-commands} 对匹配oldboy的行到其后的2行操作
实例1-11 正则表达式匹配删除
代码
[root@ben-test ~]# sed '/zhangyao/,3d' person.txt
101,oldboy,CEO (1)
104,yy,CFO (4)
105,feixue,CIO (5)
说明:匹配到zhangyao字符串,对此行到第3行操作删除
代码
[root@ben-test ~]# sed '/zhangyao/,+3d' person.txt
101,oldboy,CEO
说明:对匹配到zhangyao字符串,还有此行的后3行进行删除
代码
[root@ben-test ~]# sed '/^.*ex.*$/,4d'person.txt
101,oldboy,CEO
102,zhangyao,CTO
105,feixue,CIO
说明:正则表达式匹配到含有ex字符的行,然后进行操作删除
实例1-12 用新行替换旧行
代码
[root@ben-test ~]# sed '2c 107,bingbing,CCO'person.txt
101,oldboy,CEO
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
说明:参数c是指定行数替换内容,2c是指定第二行
转载于:https://blog.51cto.com/yinjianbin/1873822