web-dev-qa-db-ja.com

最初に一致する行のみをsedに置き換えます

BSD sed(no GNU extension)を使用して、以下に示す例と同様の操作を実行するにはどうすればよいですか?ただし、行番号の代わりに、パターンが発生します(実際の数を指定する必要はありません)?

行番号に制限する

最も単純な制限は行番号です。
3行目の最初の番号を削除する場合は、コマンドの前に「3」を追加するだけです。

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

出典: http://www.grymoire.com/Unix/Sed.html#uh-26

4
voices

これは完全に機能します:

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

省略可能:

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

GNU&BSD:

sed '1、/ [0-9] [0-9] */s ///' <ファイル名> newfilename
0
voices
{ 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

...それらのいずれかで動作するはずです。

1
mikeserv