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

Bash-注释掉部分匹配文件中字符串的特定行,bash,sed,Bash,Sed,我有一个带参数的文件 testArgument= 它可以有一些等于它或没有,但我想评论它,并添加与提供的信息新行 之前: testArgument=Something 结果: #testVariable=Something #Comments to let the user know of why the change testVariable=NewSomething 我应该循环它还是应该使用类似于sed?我需要它与Ubuntu、Debian和bash兼容。您可以使用awk awk '

我有一个带参数的文件

testArgument=
它可以有一些等于它或没有,但我想评论它,并添加与提供的信息新行

之前:

testArgument=Something
结果:

#testVariable=Something

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

我应该循环它还是应该使用类似于
sed
?我需要它与Ubuntu、Debian和bash兼容。

您可以使用
awk

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

更改原始文件的步骤

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

您可以这样使用sed:

sed 's/^\(testArgument\)=.*/#&\n\n#Comment here\n\1=NewSomething/' file
&
打印替换中的完全匹配,并且
\1
引用第一个捕获组“testArgument”

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

如果您使用的sed的其他版本不支持替换中的换行符,请参阅以获取一些处理方法

或者,使用GNU awk:

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

你说的“文件到位”是什么意思?我需要保留相同的文件,因为文件中还有其他数据。这是一个新的文件吗?我可以添加额外的要求吗?可能会让事情变得更难。“testArgument”可能已经被注释了,因此在这种情况下,只需在该行下面添加新行即可。但是如果没有评论,那么评论,然后添加新行。哦,我搞砸了。争论过后,我的档案里没有相等的东西。我想我可以用这个sed的/^(testArgument)。*/#&\n\n\n在这里注释\n\1 NewSomething/'文件重写您的语句,这可能是因为您的seed版本不支持替换字符串中的换行符。我链接的问题解释了如何处理这个问题。如果你有机会,看看这个问题。谢谢你的帮助!
gawk '/^testArgument/ {$0 = gensub(/^(testArgument)=.*/, "#\\0\n\n#Comment here\n\\1=NewSomething", 1)}1' file