最初の一致行のみsedに置き換え

最初の一致行のみsedに置き換え

GNU拡張なしでBSD sedを使用すると、以下の例と同様の操作を実行できますが、行番号の代わりに(実際の番号を指定する代わりに)パターンが発生する最初の行で置き換えが行われます。 ?

行番号の制限

最も単純な制限は行番号です。
行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///' <ファイル名> 新しいファイル名

関連情報