使用sed替换整行的第二个实例

时间:2016-07-18 09:51:40

标签: bash sed

我正在编写一个bash脚本,我想找到一个特定的字符串,并在第二次出现时替换整行。

例如:

# randomtext 9876
randomtext 9999

我想用“randomtext 123”替换第二次出现的“randomtext”。所以最终输出应该是这样的:

# randomtext 9876
randomtext 123

我在网上找到了一个与我想要的完全相似的解决方案,但我不确定如何使用它。

sed -i "0,/^PATTERN/ s/^PATTERN=.*$/PATTERN=XY/" test.txt

1 个答案:

答案 0 :(得分:2)

您的要求不清楚,您的样本输入/输出没有帮助,但给出了此输入文件:

$ cat file
# randomtext 9876
foo
randomtext 9999
bar
randomtext 3

替换第二次出现的randomtext:

$ awk '{print (/randomtext/ && (++c==2) ? "randomtext 123" : $0)}' file
# randomtext 9876
foo
randomtext 123
bar
randomtext 3

替换所有未注释的randomtext事件:

$ awk '{print (/^[^#]*randomtext/ ? "randomtext 123" : $0)}' file
# randomtext 9876
foo
randomtext 123
bar
randomtext 123

替换randomtext的第一个未注释的出现:

$ awk '{print (/^[^#]*randomtext/ && (++c==1) ? "randomtext 123" : $0)}' file
# randomtext 9876
foo
randomtext 123
bar
randomtext 3