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'
. 여러 단어로 확장되는 것을 방지하기 위해 쉘에서 변수를 큰따옴표로 묶습니다.