如何在BASH中包含匹配模式的任何行之前添加#?

时间:2014-06-15 13:35:05

标签: bash sed grep

我需要在包含模式“000”的任何行之前添加#,例如,考虑此示例文件:

This is a 000 line.
This is 000 yet ano000ther line.
This is still yet another line.

如果我运行该命令,它应该将#添加到找到“000”的任何文件的前面。结果将是:

#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.

我能做的最好的是像这样的while循环,这似乎太复杂了:

while read -r line
do
    if [[ $line == *000* ]]
    then
          echo "#"$line >> output.txt
    else
          echo $line >> output.txt
    fi
done < file.txt

如何在找到模式的任何行的前面添加#

5 个答案:

答案 0 :(得分:54)

以下sed命令适用于您,不需要任何捕获组:

sed /000/s/^/#/

说明:

  • /000/匹配000
  • s在上面匹配的行上执行替换
  • 替换将在行的开头插入一个英镑字符(#)(^

答案 1 :(得分:20)

这可能适合你(GNU sed):

sed 's/.*000/#&/' file

答案 2 :(得分:3)

问题是如何将减号添加到文件中的那些行,以便让蒂姆合作者得到更好的答案,我建议如下:

sed /000/s/^/#/ > output.txt

或者您可以考虑使用sed能够就地编辑相关文件并制作备份副本,如:

sed -i.bak /000/s/^/#/ file.txt
&#34; -i&#34;选项将编辑并保存文件内联/就地 &#34; -i.bak&#34;选项还会将原始文件备份到file.txt.bak,以防你搞砸了。

你可以替换&#34; .bak&#34;带有任何你喜欢的后缀。 例如:&#34; -i.orignal&#34;将原始文件创建为:&#34; file.txt.orignal&#34;

答案 3 :(得分:1)

或使用ed

echo -e "g/000/ s/^/#/\nw\nq" | ed -s FILENAME

或以ed:

打开文件
ed FILENAME

并编写此命令

g/000/ s/^/#/
w
q

答案 4 :(得分:0)

试试这个GNU sed命令,

$ sed -r '/000/ s/^(.*)$/#\1/g' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.

<强>解释

  • /000/ sed替换仅适用于包含000的行。一旦找到相应的行,它就会在其前面添加#符号。

通过awk,

$ awk '/000/{gsub (/^/,"#")}1' file
#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line
  • gsub函数用于添加包含#的行前面的000