我需要在包含模式“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
如何在找到模式的任何行的前面添加#
?
答案 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
。