如何在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.
说明:
sed替换仅适用于包含/000/
的行。一旦找到对应的行,它会在其前面添加000
符号#
$ 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 /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