Bash - 注释掉与文件中的字符串部分匹配的特定行

时间:2014-09-20 15:14:21

标签: bash sed

我有一个带参数的文件

testArgument=

它可能有相同的东西或什么,但我想评论它并添加提供信息的新行

在:

testArgument=Something

结果:

#testVariable=Something

#Comments to let the user know of why the change
testVariable=NewSomething

我应该循环它还是应该使用sed之类的东西?我需要它兼容Ubuntu和Debian以及bash。

2 个答案:

答案 0 :(得分:1)

你可以像这样使用sed:

sed 's/^\(testArgument\)=.*/#&\n\n#Comment here\n\1=NewSomething/' file

&在替换中打印完整匹配,\1指向第一个捕获组“testArgument”。

要在原地执行文件替换(即替换原始文件的内容),请添加-i开关。否则,如果要将命令输出到新文件,请执行sed '...' file > newfile

如果您使用的替换版本中不支持\n个换行符的其他版本的sed,请参阅this answer了解处理它的方法。

或者,使用GNU awk:

gawk '/^testArgument/ {$0 = gensub(/^(testArgument)=.*/, "#\\0\n\n#Comment here\n\\1=NewSomething", 1)}1' file

答案 1 :(得分:0)

您可以使用awk

awk '/^testArugment/ {$0="#"$0"\n\n#Comments to let the user know of why the change\ntestVariable=NewSomething"}1' file

cat file
some data
testArugment=Something
more data

awk '/^testArugment/ {$0="#"$0"\n\n#Comments to let the user know of why the change\ntestVariable=NewSomething"}1' file
some data
#testArugment=Something

#Comments to let the user know of why the change
testVariable=NewSomething
more data

更改原始文件

awk 'code....' file > tmp && mv tmp file