Linux sed命令详解

简介

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linuxsed命令是一个用于文本处理的强大工具。它可以根据指定的编辑命令对输入文件进行操作,并输出结果。sed命令的基本语法如下: sed [选项] sed编辑命令 输入文件 其中,选项是可选的,用于控制sed命令的行为。sed编辑命令是指对文本进行操作的具体命令,可以是单个命令,也可以是多个命令组合在一起。输入文件是要进行处理的文本文件。 sed命令还支持通过管道将shell命令的输出作为输入进行处理,具体语法如下: shell命令 | sed [选项] sed编辑命令 此外,sed命令还可以通过-f选项指定一个sed脚本文件来进行处理,具体语法如下: sed [选项] -f sed脚本文件 输入文件 在使用sed命令时,还可以通过使用一些小技巧来实现特定的功能。例如,可以使用命令连接符";"来输出多行不连续的内容。例如,以下命令会输出passwd文件中的第1行、第3行和第5行: sed -n '1p;3p;5p' passwd 这样,你就能够根据需要使用sed命令来处理文本文件,并实现各种需要的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【Linux篇】sed命令详解](https://blog.csdn.net/weixin_45842494/article/details/124699219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux - sed命令详解](https://blog.csdn.net/qq_48391148/article/details/125711532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值