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 中对变量进行双引号,以阻止它们被扩展为多个单词。