有没有办法用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
及其后面的任何内容。
答案 0 :(得分:20)
首先使用^
替换所有换行符,这些换行符不会出现在文件中的任何其他位置(例如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