sed源自英语"stream editor"的缩写,意思流编辑器。sed是linux常见的命令行程序。sed 用来把文档里面的文字经过一系列编辑命令转换为另一种格式输出。

    进入当前目录/home/robot,vi aaa.txt ,内容如下:

11111111111111
22222222222222
33333333333333
44444444444444
55555555555555
11111222223333
22223333355555
sed用法1:列出文件制定行的内容
[robot@hadoop103 ~]$ sed -n '2,4p' aaa.txt   #打印aaa.txt文件中的第二行到第四行。
22222222222222
33333333333333
44444444444444

   参数说明:    -n(关闭自动输出),p(表示打印,没有p报错)

sed用法2:批量替换文本中某个字段

[robot@hadoop103 ~]$ sed 's/11111/aaaa/g'  aaa.txt    #将aaa.txt中11111字段替换成aaaa
aaaaaaaa1111
22222222222222
33333333333333
44444444444444
55555555555555
aaaa222223333
22223333355555

    s/替换字段/替换后字段/g     有d的模式:将所有匹配"替换字段"的字符串转换成"替换后字段" 

    s/替换字段/替换后字段/     无g 将匹配"替换字段"的行转换成"替换文字",只替换一次

[robot@hadoop103 ~]$ sed 's/11111/aaaa/'  aaa.txt 
aaaa111111111    #后面的111111111就没有被替换成aaaa,区别上面带g的
22222222222222
33333333333333
44444444444444
55555555555555
aaaa222223333
22223333355555

   注:sed默认不会修改原始文件,但-i 编辑原文件(此选项慎用,如果使用则原文件就会被修改,无法恢复)。

[robot@hadoop103 ~]$ cat aaa.txt   #前面虽然用了sed替换,但是文件并没有被替换,只是显示的数据被替换了。
11111111111111
22222222222222
33333333333333
44444444444444
55555555555555
11111222223333
22223333355555

  下面添加了-i参数,sed修改了原始文件,将批处理的结果更新到文件中

[robot@hadoop103 ~]$ sed  -i  's/11111/aaaa/g'  aaa.txt    #增加了-i参数
[robot@hadoop103 ~]$ cat aaa.txt    #aaa.txt文件内容被更新了
aaaaaaaa1111  
22222222222222
33333333333333
44444444444444
55555555555555
aaaa222223333
22223333355555
2aaaa11132aaaa111
sed用法3:批处理删除文本中某行,或者特定内容的行
[robot@hadoop103 ~]$ sed '2d' aaa.txt    #1.删除第二行数据
aaaaaaaa1111
33333333333333
44444444444444
55555555555555
aaaa222223333
22223333355555

  参数:d,表示删除,加在行后

  注意:同样,如果sed 后不加-i,所有删除操作不会更新到原始文件中,一旦加了-i就会更新文件,不可逆

[robot@hadoop103 ~]$ cat aaa.txt 
aaaaaaaa1111
22222222222222
33333333333333
44444444444444
55555555555555
aaaa222223333
22223333355555
2aaaa11132aaaa111
[robot@hadoop103 ~]$ sed '/22/d'  aaa.txt   #2.删除含有22字段的行
aaaaaaaa1111
33333333333333
44444444444444
55555555555555
2aaaa11132aaaa111

Logo

更多推荐