Text-Processing

僅在第一個匹配行上替換為 sed

  • March 10, 2019

使用 BSD sed(無 GNU 擴展),我如何執行類似於下面提供的範例的操作,但不是行號,而是在出現模式的第一行執行替換(而不是必須指定實際數量)?

限制為行號

最簡單的限制是行號。

如果要刪除第 3 行的第一個數字,只需在命令前添加“3”即可:

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

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

這完美地工作:

sed '1,/abc/s/abc/xyz/' file.txt

可以簡寫為:

sed '1,/abc/s//xyz/' file.txt

兼容 GNU 和 BSD:

sed '1,/[0-9][0-9]*/s///' <文件名>新文件名
{ 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

…應該與他們中的任何一個一起工作。

引用自:https://unix.stackexchange.com/questions/250603