gpt4 book ai didi

sed - 如何使用 sed 替换第 n 次出现的字符串

转载 作者:行者123 更新时间:2023-12-01 16:09:59 42 4
gpt4 key购买 nike

有没有办法使用 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

关于sed - 如何使用 sed 替换第 n 次出现的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13817798/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com