有没有办法使用 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
.
有没有办法使用 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
.
首先^
使用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