22

sed を使用して、ファイル内の n 番目の文字列を置き換える方法はありますか?

sed -i '0,/jack.*/ s//jill/'最初に出現したものを置き換えるために使用 しています。

n番目のオカレンスを置き換えるように変更するにはどうすればよいですか?

私のファイルの内容は次の行です。

first line
second line
third line
jack=1
fifth line
jack=
seventh line

の後の値はわかりませjack=ん。何でもかまいません。

jack=の 2 番目のオカレンスとそれに続くものをに置き換えたいjill

4

1 に答える 1

29

最初にすべての改行を、ファイル内のどこにもない一意の文字 (例: ^)に置き換えますtr。の単一の文字列を作成するには、これを行う必要がありますsed。次に、それをに渡しsed、文字列の n 番目のオカレンスを置き換えるように指示します。最後に、出力を元に戻してtr改行を再作成します。

n=2 の場合、コマンドは次のとおりです。

$ tr '\n' '^' < file | sed 's/jack/jill/2' | tr '^' '\n'
first line
second line
third line
jack
fifth line
jill
seventh line

アップデート:

sed次のコマンドを使用して、最初に改行を変更せずに で実行することもできます。

$ sed ':a;N;$!ba;s/jack/jill/2' file

または、次を使用しますawk

$ awk '/jack/{c+=1}{if(c==2){sub("jack","jill",$0)};print}' file
于 2012-12-11T10:16:31.280 に答える