使用 sed 更改特定行

使用 sed 更改特定行

DbConnection.java我需要使用命令更改 Java 文件中的一行sed。该行是:

connection = DriverManager.getConnection("jdbc:mysql://**localhost**/**bajaj**","**root**", "**root**");

我已经尝试过以下方法,效果很好(我可以替换用户提供的值):

sed -i "s|://localhost/bajaj|://${HOSTNAME}/${DBNAME}|" DbConnection.java

但下面的我需要开始工作,我无法替换DBUSERNAME& DBPASSWORD

sed -i "s|"jdbc:mysql://localhost/bajaj","root", "root"|"jdbc:mysql://${HOSTNAME}/${DBNAME}","${DBUSERNAME}", "${DBPASSWORD}"|" DbConnection.java

答案1

您使用双引号来分隔字符串以及字符串本身,因此带引号的字符串会提前停止,并且不包括内部引号字符:

sed -i "s|"jdbc:mysql:...
Ends here-^

您可以转义字符串中的每个引号:

sed -i "s|\"jdbc:mysql://localhost/bajaj\",\"root\", \"root\"|\"jdbc:mysql://${HOSTNAME}/${DBNAME}\",\"${DBUSERNAME}\", \"${DBPASSWORD}\"|" DbConnection.java

现在,命令中的每个双引号sed前面都有一个反斜杠,以阻止 shell 解释它。

或者,您可以在参数周围使用单引号sed

sed -i 's|"jdbc:mysql://localhost/bajaj","root", "root"|"jdbc:mysql://'"${HOSTNAME}"'/'"${DBNAME}"'","'"${DBUSERNAME}"'", "'"${DBPASSWORD}"'"|' DbConnection.java

为了让变量仍然被替换,我们在每个变量周围留下单引号:'AB'"$VAR"'CD'。我们在 shell 中对变量进行双引号,以阻止它们被扩展为多个单词。

相关内容