【问题标题】:I need to use sed to comment out two lines in a text file我需要使用 sed 注释掉文本文件中的两行
【发布时间】:2016-11-03 00:43:54
【问题描述】:

我正在运行自定义内核构建并在 bash 脚本中创建了自定义配置文件,现在我需要在 Kbuild 中注释掉两行以防止 bc 编译器运行。线条是...

$(obj)/$(timeconst-file): kernel/time/timeconst.bc FORCE
    $(call filechk,gentimeconst)

使用 Expresso,我有一个匹配第一行的正则表达式...

^\$\(obj\)\/\$\(timeconst-file\): kernel\/time\/timeconst\.bc FORCE

Regex Match

但无法让 sed 在行前实际插入 #。

任何帮助将不胜感激。

【问题讨论】:

    标签: regex bash sed comments


    【解决方案1】:

    sed -i "/<Something that matches the lines to be replaced>/s/^#*/#/g"

    这使用一个正则表达式来选择你想要评论/<something>/的行,然后用#替换字符串^的开头/s/(加上已经存在的任何#*s,#。所以你可以评论已经评论的行没问题。/g 表示找到第一个匹配项后继续,因此您可以进行大量评论。

    我有一个 bash 脚本,我可以使用上述方法进行大量评论:

    sed -i.bkp "/$1/s/^#\+\s*//g" $2 i.bkp 对名为 .bkp 的文件进行备份

    脚本被称为./comment.sh <match> <filename>

    匹配不必匹配整行,只要让它只命中你想要的行即可。

    【讨论】:

    • 他在模式中使用 /,所以你应该使用 ;或,而不是 /。
    • 公平点。我在我的 bash 脚本中使用它并只是将它们转义 \/,但我也希望经常看到 ;,
    【解决方案2】:

    您可以使用以下 sed 进行替换:

    sed  's,^\($(obj)/$(timeconst-file): kernel/time/timeconst.bc FORCE\),#\1,'
    

    您不需要转义( )$,因为在没有-r 的sed 中它被视为文字,用于分组\( 使用\)

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      相关资源
      最近更新 更多