使用搜索模式注释一行并插入新行 shell 脚本

comment a line using search pattern and insert new line shell script

我正在尝试使用搜索模式注释文件中的一行,然后在其旁边插入新行。

search_variable=Dlog4j2.formatMsgNoLookups
new_variable="wrapper.java.additional.47=-Dlog4j2.formatMsg=false"

cat testfile.txt    
wrapper.java.additional.47=-Dlog4j2.formatMsgNoLookups=true

这个有效,但试图使用变量来注释该行并且

sed -i '/Dlog4j2.formatMsgNoLookups/s/^/#/g' testfile.txt

输出:

#wrapper.java.additional.47=-Dlog4j2.formatMsgNoLookups=true

期望的输出

cat testfile.txt
#wrapper.java.additional.47=-Dlog4j2.formatMsgNoLookups=true
wrapper.java.additional.47=-Dlog4j2.formatMsg=false

使用 GNU sed:

search_variable="Dlog4j2.formatMsgNoLookups"
new_variable="wrapper.java.additional.47=-Dlog4j2.formatMsg=false"

sed -i "s/.*${search_variable}.*/#&\n${new_variable}/" testfile.txt

输出到testfile.txt:

#wrapper.java.additional.47=-Dlog4j2.formatMsgNoLookups=true
wrapper.java.additional.47=-Dlog4j2.formatMsg=false

&的含义见using sed with ampersand (&)

这种情况下大括号也可以省略。

这也有帮助:Difference between single and double quotes in bash