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の前にバックスラッシュが追加され、シェルがそれを解釈できなくなります。

または、パラメータの周囲に単一引用符を使用することもできますsed

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

変数が置換され続けるように、各変数の周りに一重引用符を付けます'AB'"$VAR"'CD'。複数の単語への拡張を防ぐために、シェル内の変数を二重引用符で囲みます。

関連情報