如何用sed注释掉第一次出现

时间:2015-07-15 17:19:58

标签: linux replace sed comments

我正在尝试使用sed在配置文件中注释掉一行并出现问题。

我正在使用sed –i '/GV()/s/^/#/' filename

并且它有效,但它会在文件中注释掉所有GV()。我只想评论第一次出现。

我知道如何用sed做到这一点?

由于

3 个答案:

答案 0 :(得分:1)

使用GNU sed:

sed -i '/GV()/{s/.*/#&/;:A;n;bA}' file

答案 1 :(得分:1)

sed -e '1,/GV()/s/GV()/#GV()/' filename

答案 2 :(得分:0)

对于这个问题,awk是一个自然的工具。考虑一下这个测试文件:

$ cat file
one
GV()
GV()

然后,使用awk:

$ awk '/GV()/ && !f {print "#"$0; f=1; next} 1' file
one
#GV()
GV()

只有在之前没有看到这样的行时,上面的注释才会显示包含GV()的行。变量f会跟踪之前是否见过GV()

如何运作

  • /GV()/ && !f {print "#"$0; f=1; next}

    /GV()/ && !f是一个条件:大括号{...}后面的语句只有在条件为真时才会执行。只有当行包含GV()并且f为假时才是真的,这意味着我们之前没有看到过这样的行。在这种情况下,我们(a)注释掉行print "#"$0,(b)将f设置为true:f=1,以及(c)跳过其余命令并重新开始在next行。

  • 1

    这是awk用于打印线条的神秘简写。