使用 BSD sed(无 GNU 扩展),我如何执行类似于下面提供的示例的操作,但替换是在出现模式的第一行执行,而不是行号(而不是必须指定实际数量)?
限制行号
最简单的限制是行号。
如果你想删除第3行的第一个数字,只需在命令前添加“3”即可:
sed '3 s/[0-9][0-9]*//' <filename >newfilename
答案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///' <文件名>新文件名