用匹配的字符串注释掉行

时间:2013-04-24 02:59:41

标签: shell

如果行中存在字符串,则查找一个简单的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”的行被注释掉。

3 个答案:

答案 0 :(得分:5)

我相信这会为你做到。

 sed -i .backup "/[[:<:]]word1[[:>:]]/s/^/#/g" file

答案 1 :(得分:1)

我认为,您的问题类似于How do I add a comment (#) in front of a line after a key word search match

如果我错了,请纠正我。我希望,这会对你有帮助。

答案 2 :(得分:0)

试试这个:

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

这是如何工作的? sed man page说,

  

sed命令的形式如下:

     [address[,address]]function[arguments]

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