sed

本文深入探讨了流编辑器sed的功能及其在Shell脚本和Makefile中的应用,详细介绍了sed的基本语法、编辑命令、选项以及常用命令,帮助读者掌握sed的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sed意为流编辑器( Stream Editor) ,在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是
把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。 sed和vi都源于
早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的。
sed不直接修改文件,修改的是输出的内容,可以重定向输出到文件。

sed -n '1p' 1.dat>2.dat #打印1.dat的第一行到2.dat

sed命令行的基本格式为

sed option 'script' file1 file2 ...
sed option -f scriptfile file1 file2 ...

sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以一次传
入多个文件, sed会依次处理。 sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文
件然后用-f参数指定,编辑命令的格式为

/pattern/action

其中pattern是正则表达式, action是编辑操作。 sed程序一行一行读出待处理文件,如果某一行
与pattern匹配,则执行相应的action,如果一条命令没有pattern而只有action,这个action将作
用于待处理文件的每一行。

常用sed命令

命令意义
1p或2,4p或$p或2,4!p打印特定行 $p最后一行 2,4!p不在2-4范围的行
/pattern/p打印匹配pattern的行
/pattern/s/pattern1/pattern2/查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
/pattern/s/pattern1/pattern2/g查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2
**地址(行号或pattern)**d删除匹配pattern的行
**地址(行号或pattern)**i\insertcontent在匹配行所在行号前,插入insertcontent
**地址(行号或pattern)**a\appendcontent在匹配行所在行号后,追加appendcontent
**地址(行号或pattern)**c\appendcontent把匹配行所在行号修改replacement
**地址(行号或pattern)**w output把匹配行写入文件output
**地址(行号或pattern)**r input把文件input内容读入,并追加到地址之后
**地址(行号或pattern)**q执行完第一次匹配行就退出
地址(行号或pattern)=显示匹配的行号
y/abcd/ABCD字符序列变换,逐个处理
地址(行号或pattern){p;=}执行命令组,如不使用{}只能执行单个命令
sed -n '/abc/p' testfile

注意, sed命令不会修改原文件,删除命令只表示某些行不打印输出,而不是从原文件中删去。

使用查找替换命令时,可以把匹配pattern1的字符串复制到pattern2中,比如:

sed 's/bc/-&-/' testfile
123
a-bc-
456

pattern2中的&表示原文件的当前行中与pattern1相匹配的字符串。

sed 's/\([0-9]\)\([0-9]\)/-\1-~\2~/' testfile
-1-~2~3
abc
-4-~5~6

pattern2中的\1表示与pattern1的第一个()括号相匹配的内容, \2表示与pattern1的第二个()括号
相匹配的内容。

sed选项

选项意义
-n不打印源文本,默认将待处理文本每一行打印出来
-e将下一个字符串解析为sed命令,只有一个sed命令时,可以省略-e
-f调用sed脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值