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=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 回答