2

如果行中存在字符串,则寻找一个简单的 shell 脚本(使用 sed 或 awk)来注释掉文本文件的行。例如,具有以下内容的文本文件:

line1 word1 word2
line2 word3 word4
line3 word5 word6
line4 word1 word7
line5 word10 word11

改为:

#line1 word1 word2
line2 word3 word4
line3 word5 word6
#line4 word1 word7
line5 word10 word11

如您所见,只有带有字符串“word1”的行被注释掉了。

4

3 回答 3

5

我相信这会为你做到。

 sed -i .backup "/[[:<:]]word1[[:>:]]/s/^/#/g" file
于 2013-04-24T03:16:39.307 回答
1

我认为,您的问题类似于如何在关键字搜索匹配后在一行前面添加注释 (#)

如果我错了,请纠正我。我希望这能帮到您。

于 2013-04-24T05:25:25.473 回答
0

尝试这个:

$ sed -e '/[[:<:]]word1[[:>:]]/ s/^/# /' < file
# line1 word1 word2
line2 word3 word4
line3 word5 word6
# line4 word1 word7
line5 word10 word11

这是如何运作的?sed手册页说,

sed 命令的格式如下:

     [address[,address]]function[arguments]

稍后在手册页中,它阐明了地址可以是正则表达式,这导致该函数应用于与正则表达式匹配的每一行。因此,上面给出的命令所做的是,如果该行包含独立单词word1,则应用替换函数将行首锚点替换为"# "

于 2013-04-24T04:47:08.200 回答