我有一个带参数的文件
testArgument=
它可能有相同的东西或什么,但我想评论它并添加提供信息的新行
在:
testArgument=Something
结果:
#testVariable=Something
#Comments to let the user know of why the change
testVariable=NewSomething
我应该循环它还是应该使用sed
之类的东西?我需要它兼容Ubuntu和Debian以及bash。
答案 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