如何在BASH中包含匹配模式的任何行之前添加#? 在包含“000”模式的任何行之前,我需要添加一个 > ,例如,考虑这个示例文件: This is a 000 line. This is 000 yet ano000ther line. This is still yet another line.

如何在BASH中包含匹配模式的任何行之前添加#? 在包含“000”模式的任何行之前,我需要添加一个 > ,例如,考虑这个示例文件: This is a 000 line. This is 000 yet ano000ther line. This is still yet another line.,bash,sed,grep,Bash,Sed,Grep,如果我运行该命令,它应该将#添加到找到“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 >&

如果我运行该命令,它应该将
#
添加到找到“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
读取时-r行
做
如果[[$line==*000*]]
然后
echo“#”$line>>output.txt
其他的
echo$line>>output.txt
fi
完成

如何将
#
添加到找到图案的任何行的前面

试试这个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
    的行前面添加
    #

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

sed /000/s/^/#/
说明:

  • /000/
    将一行与
    000
  • s
    对上面匹配的行执行替换
  • 替换将在行首(
    ^
    )插入一个磅字符(
    #

    • 或使用
      ed

      echo -e "g/000/ s/^/#/\nw\nq" | ed -s FILENAME
      
      或在ed中打开文件:

      ed FILENAME
      
      然后写下这个命令

      g/000/ s/^/#/
      w
      q
      
      这可能适用于您(GNU-sed):


      问题是如何将poundsign添加到文件中的这些行中,以便使tim coopers的优秀答案更加完整。我建议如下:

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

      或者您可以考虑使用SED的能力来编辑所讨论的文件,也可以生成备份拷贝:

      sed -i.bak /000/s/^/#/ file.txt
      
      “-i”选项将在线/就地编辑和保存文件 “-i.bak”选项还将把原始文件备份到file.txt.bak,以防您搞砸了什么

      你可以用任何你喜欢的后缀替换“.bak”。
      例如,“-I.OrIrAL”将创建原始文件:“file .txt.Ornalar”

      可以使用SED命令来完成这一点,但是您是否考虑过使用文本编辑器来实现这一点?例如,在vim中,这个任务可以通过宏轻松地自动化。这不需要任何引号吗?我从来没有见过没有这些字符的
      sed
      脚本。@Village:因为bash不会试图解释任何特殊字符(
      #
      不会引起任何问题,因为它是一个更大的单词的一部分),所以引号是不必要的。@TimCooper感谢您的帮助,我需要MYSQL配置文件的一些东西,这对我来说很有用,
      sed-I'/bind address/s/^/#/'/etc/MYSQL/MYSQL.conf.d/mysqld.cnf
      我不是下选者,但是没有理由捕获
      (.*)
      只是为了用它本身来代替
      \1
      -
      s/^/#/
      非常简单,谢谢,但我认为Tim Cooper的答案可能是使用sed的更好的解决方案。当使用sed时,通常认为搜索后进行替换比单独使用替换命令更有效(但是我认为在命令行中引用sed命令通常更安全,尤其是在将来某个日期该命令可能会有所改进的情况下)。是的,它是有效的,但在我看来,手动输入或将内容传送到交互式程序(如
      ed
      )似乎毫无意义,因为存在专门的非交互式工具(如
      sed
      )。另外,例如,
      sed
      默认安装在我的Debian系统上,但
      ed
      不是。而且
      sed
      版本在命令字符串中的膨胀要小得多。
      sed -i.bak /000/s/^/#/ file.txt