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

Vil*_*age 28 bash grep sed

我需要#在包含模式"000"的任何行之前添加一个,例如,考虑这个示例文件:

This is a 000 line.
This is 000 yet ano000ther line.
This is still yet another line.
Run Code Online (Sandbox Code Playgroud)

如果我运行该命令,它应该添加#到找到"000"的任何文件的前面.结果是这样的:

#This is a 000 line.
#This is 000 yet ano000ther line.
This is still yet another line.
Run Code Online (Sandbox Code Playgroud)

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

while read -r line
do
    if [[ $line == *000* ]]
    then
          echo "#"$line >> output.txt
    else
          echo $line >> output.txt
    fi
done < file.txt
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*per 59

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

sed /000/s/^/#/
Run Code Online (Sandbox Code Playgroud)

说明:

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

  • @Village:由于bash没有尝试解释的特殊字符(```不会引起任何问题,因为它是更大词的一部分),引号不是必需的. (3认同)
  • 这不需要任何引号吗?我从来没有见过没有这些的“sed”脚本。 (2认同)
  • @TimCooper 感谢您的帮助,我需要一些 MYSQL 配置文件,这对我有用`sed -i '/bind-address/s/^/#/' /etc/mysql/mysql.conf.d/mysqld.cnf ` (2认同)

pot*_*ong 23

这可能适合你(GNU sed):

sed 's/.*000/#&/' file
Run Code Online (Sandbox Code Playgroud)

  • 村民感谢,但我认为Tim Cooper的回答可能是使用sed更好的解决方案.当使用sed时,通常认为搜索后跟替换比单独替换命令更有效(但是我认为单引用命令行上的sed命令,通常更安全,特别是当该命令可能在将来某个日期得到改善时) . (3认同)