仅将第一个匹配行替换为 sed

仅将第一个匹配行替换为 sed

使用 BSD sed(无 GNU 扩展),我如何执行类似于下面提供的示例的操作,但替换是在出现模式的第一行执行,而不是行号(而不是必须指定实际数量)?

限制行号

最简单的限制是行号。
如果你想删除第3行的第一个数字,只需在命令前添加“3”即可:

sed '3 s/[0-9][0-9]*//' <filename >newfilename

来源:http://www.grymoire.com/Unix/Sed.html#uh-26

答案1

{ sed -Ee'/[0-9]+/{s///;q;}'; cat; } <in >out

^应该与 BSD 一起工作sed。但显然事实并非如此。

所以:

sed -e'/[0-9][0-9]*/{s///;:b' -e'n;bb' -e\} <in >out

...应该与他们中的任何一个一起工作。

答案2

这很完美:

sed '1,/abc/s/abc/xyz/' 文件.txt

可以缩写为:

sed '1,/abc/s//xyz/' 文件.txt

与 GNU 和 BSD 兼容:

sed '1,/[0-9][0-9]*/s///' <文件名>新文件名

相关内容