我需要使用sed在文本文件中注释掉两行

时间:2016-06-30 18:59:49

标签: regex bash sed comments

我正在运行自定义内核构建并在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在行前插入#。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

这使用正则表达式选择要评论的行/<something>/,然后将/s/替换为字符串^的开头(加上已存在的任何#*#。所以你可以评论已经评论过的行没有问题。/g表示你找到第一场比赛后继续,所以你可以做批量评论。

我有一个bash脚本,我可以使用上面的内容批评:

sed -i.bkp "/$1/s/^#\+\s*//g" $2 i.bkp备份名为.bkp

的文件

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

匹配不必匹配整条线,只是足以使它只能击中你想要的线。

答案 1 :(得分:0)

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

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

您无需转义( )$,因为在没有-r的情况下,它被视为文字,用于分组\( {使用{1}}。