简介

Sed是非交互式的编辑器,用来对文本进行过滤和替换操作,它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

参数
sed的常用选项:
-e		他告诉sed将下一个参数解释为一个sed指令,只有命令行上给出多个sed指令时需要-e选项
-f		后跟保存了sed指令的文件
-n		取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-i		直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
sed中编辑命令:
-a		追加	向匹配行后面插入内容
-c		更改 	更改匹配行的内容
-i		插入 	向匹配行前插入内容
-d		删除	删除匹配行内容
-s		替换	替换匹配的内容
-p		打印	打印匹配行内容,通常与-n和用
=		打印匹配的行号
r		用用将内容读入文件
w		用与将匹配内容写入文件
使用实列
向文件中添加或插入行
#向第三行后面添加Hello
[root@boke home]# sed '3aHello' 2.test 
aaaaaa
bbbbbb
cccccc
Hello
dddddd
#在最后一行加入Hello
[root@boke home]# sed '$aHello' 3.test 
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
dddddd
Hello
#向内容cccccc前面添加heelo,如果文件中有多行包括cccccc,则每一行后面都会添加
[root@boke home]# sed  '/cccccc/ahello' 5.test 
aaaaaa
bbbbbb
cccccc
hello
更改文件中指定的行
#将文件第一行替换成hello
[root@boke home]# sed '1chello' 1.test 
hello
bbbbbb
cccccc
#将包含文件ddd的行替换为hello
[root@boke home]# sed '/ddd/chello' 1.test 
aaaaaa
bbbbbb
cccccc
hello
#将最后一行替换为word
[root@boke home]# sed '$cword' 1.test 
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
word
删除文件中的行
#删除文件第二行
[root@boke home]# sed '2d' 1.test 
aaaaaa
cccccc
dddddd
eeeeee
#删除文件1,2行
[root@boke home]# sed '1,2d' 1.test 
cccccc
dddddd
eeeeee
#删除文件最后一行
[root@boke home]# sed '$d' 1.test 
aaaaaa
bbbbbb
cccccc
#删除匹配aaa的行
[root@boke home]# sed '/aaa/d' 1.test 
bbbbbb
cccccc
dddddd
#删除1~2之外的所有行
[root@boke home]# sed '1,2!d' 1.test 
aaaaaa
bbbbbb
#删除空行
[root@boke home]# cat 1.test 
aaaaaa

bbbbbb
cccccc
[root@boke home]# sed '/^$/d' 1.test 
aaaaaa
bbbbbb
cccccc
#删除不匹配aa或bb的所有行
[root@boke home]# cat 2.test 
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
dddddd
[root@boke home]# sed '/aa\|bb/!d' 2.test 
aaaaaa
bbbbbb
替换文件中的内容
#将文本123替换为word,默认只替换每行第一个
[root@boke home]# cat 3.test 
aaabbb
123 123
cccccc
234

[root@boke home]# sed 's/123/word/' 3.test 
aaabbb
word 123
cccccc
234

#将文本中所有123行替换为word
[root@boke home]# cat 3.test 
aaabbb
123 123
cccccc
234

[root@boke home]# sed 's/123/word/g' 3.test 
aaabbb
word word
cccccc
234

#将每行中第二个匹配的123替换为hello
[root@boke home]# cat 3.test 
aaabbb
123 123
cccccc
234

[root@boke home]# sed 's/123/word/2' 3.test 
aaabbb
123 word
cccccc
234

#将每行所有匹配的123替换为word,并将替换后内容写入3.txt
[root@boke home]# cat 3.test 
aaabbb
123 123
cccccc
123
[root@boke home]# sed -n 's/123/word/gpw 3.txt' 3.test 
word word
word
#删除#号注释
[root@boke home]# cat 5.test 
#aaaaaa
#bbbbbb
#cccccc
#dddddd
[root@boke home]# sed  's/^#//' 5.test 
aaaaaa
bbbbbb
cccccc
dddddd
#删除文本中的空格行
[root@boke home]# cat 5.test 
#aaaaaa

#bbbbbb

#cccccc

#dddddd

[root@boke home]# sed '/^$/d' 5.test 
#aaaaaa
#bbbbbb
#cccccc
#dddddd
[root@boke home]# ^C
[root@boke home]# 
打印文件中的行
#打印文件中第2行内容
[root@boke home]# cat 2.test 
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
dddddd
[root@boke home]# sed -n '3p' 1.test 
bbbbbb
#打印文件最后一行
[root@boke home]# cat 1.test 
aaaaaa

bbbbbb
cccccc
[root@boke home]# sed -n '$p' 1.test 
cccccc
#打印文件1~3行
[root@boke home]# cat 2.test 
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
dddddd
[root@boke home]# sed -n '1,3p' 2.test 
aaaaaa
bbbbbb
cccccc
#打印文件3行到最后一行内容
[root@boke home]# cat 2.test 
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
dddddd
[root@boke home]# sed -n '3,$p' 2.test 
cccccc
dddddd
eeeeee
dddddd
#逐行读取文件,打印匹配ddd的行
[root@boke home]# cat 2.test 
1.aaaaaa
2.bbbbbb
3.cccccc
4.dddddd
5.eeeeee
6.dddddd
[root@boke home]# sed -n '/dd/p' 2.test 
4.dddddd
6.dddddd
#打印从匹配的cc行至最后一行内容
[root@boke home]# cat 2.test 
1.aaaaaa
2.bbbbbb
3.cccccc
4.dddddd
5.eeeeee
6.dddddd
[root@boke home]# sed -n '/cc/,$p' 2.test 
3.cccccc
4.dddddd
5.eeeeee
6.dddddd
打印文件中行号
#打印文件的行号
[root@boke home]# wc -l 1.test 
4 1.test
[root@boke home]# sed -n '$=' 1.test 
4
#打印匹配cc的行号
[root@boke home]# cat 2.test 
1.aaaaaa
2.bbbbbb
3.cccccc
4.dddddd
5.eeeeee
6.dddddd
[root@boke home]# sed -n '/cc/=' 2.test 
3
#打印匹配cc行号及内容
[root@boke home]# cat 2.test 
1.aaaaaa
2.bbbbbb
3.cccccc
4.dddddd
5.eeeeee
6.dddddd
[root@boke home]# sed -n '/cc/{=;p}' 2.test 
3
3.cccccc
从文件中读取内容
#将1.test内容,读入2.test中,会在1.test中的每一行后读入2.test内容
[root@boke home]# cat 1.test 
111
222
333
[root@boke home]# cat 2.test 
aaa
bbb
ccc
[root@boke home]# sed 'r 2.test' 1.test 
111
aaa
bbb
ccc
222
aaa
bbb
ccc
333
aaa
bbb
ccc
#在1.test第2行插入2.test的内容
[root@boke home]# cat 1.test 
111
222
333
[root@boke home]# cat 2.test 
aaa
bbb
ccc
[root@boke home]# sed '2r 2.test' 1.test 
111
222
aaa
bbb
ccc
333
#在1.test的最后一行插入2.test的内容
[root@boke home]# cat 1.test 
111
222
333
[root@boke home]# cat 2.test 
aaa
bbb
ccc
[root@boke home]# sed '$r 2.test' 1.test 
111
222
333
aaa
bbb
ccc
向文件中写入内容
#将1.test文件的内容写入2.test,如果2.test文件不存在则创建,如果2.test存在则覆盖之前内容
[root@boke home]# cat 1.test 
111
222
333
[root@boke home]# cat 2.test 
aaa
bbb
ccc
[root@boke home]# cat 2.test 
111
222
#将文件1.test中第二行写入2.test中
[root@boke home]# cat 1.test 
111
222
333
[root@boke home]# cat 2.test 
aaa
bbb
ccc
[root@boke home]# sed -n '2w 2.test' 1.test 
[root@boke home]# cat 2.test 
222
#将1.test第一行与最后一行写入2.test中
[root@boke home]# cat 1.test 
111
222
333
[root@boke home]# cat 2.test 
aaa
bbb
ccc
[root@boke home]# sed -n -e '1w 2.test' -e '$w 2.test' 1.test 
[root@boke home]# cat 2.test 
111
333
#将1.test中匹配123或abc的行内容,写入2.test、
[root@boke home]# cat 1.test 
123
abc
345
123,aaa,abc,ddd123 
[root@boke home]# sed -n '/123\|abc/w 2.test' 1.test 
[root@boke home]# cat 2.test 
123
abc
123,aaa,abc,ddd123 
#将1.test中匹配234的行到最后一行的内容写入2.test中
[root@boke home]# cat 1.test 
111
234
aaa
bbb
ccc
[root@boke home]# sed -n '/234/,$w 2.test' 1.test 
[root@boke home]# cat 2.test 
234
aaa
bbb
ccc

est

111
333

#将1.test中匹配123或abc的行内容,写入2.test、
[root@boke home]# cat 1.test 
123
abc
345
123,aaa,abc,ddd123 
[root@boke home]# sed -n '/123\|abc/w 2.test' 1.test 
[root@boke home]# cat 2.test 
123
abc
123,aaa,abc,ddd123 
#将1.test中匹配234的行到最后一行的内容写入2.test中
[root@boke home]# cat 1.test 
111
234
aaa
bbb
ccc
[root@boke home]# sed -n '/234/,$w 2.test' 1.test 
[root@boke home]# cat 2.test 
234
aaa
bbb
ccc
Logo

更多推荐