![sed 호출에서 여러 백틱 이스케이프](https://rvso.com/image/36421/sed%20%ED%98%B8%EC%B6%9C%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%EB%B0%B1%ED%8B%B1%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84.png)
여러 SQL 문에서 검색 및 바꾸기를 반복적으로 수행해야 합니다.
에서:
CREATE TABLE `Old_Name` (
에게:
ALTER TABLE `Old_Name` RENAME TO `New_Name`
위 쿼리에는 백틱이 포함되어 있습니다 `
. 나는 다음을 시도했다
sed -i -r "s/CREATE TABLE \`$search\` \(/ALTER TABLE \`$search\` RENAME TO \`$replacement\`/g" /query.txt;
대신 명령줄에 Enter를 생성합니다. 하지만 뒤에 공백을 추가하면 $replacement
정상적으로 실행됩니다. 그러나 나는 이후의 공간을 원하지 않습니다 New_Name
.
참고로 이것이 실제로 역따옴표로 인해 발생한 것인지 아니면 변수 이름 보간 문제일 수 있는지는 알 수 없습니다. 어떤 경우이든 이 문제를 어떻게 해결할 수 있습니까?
답변1
이스케이프를 최소한으로 줄이려면 다음과 sed
같이 작은따옴표를 사용하는 것이 좋습니다.
sed 's/pattern/repl/g'
(작은 따옴표에서는 두려움이나 탈출 없이 자유롭게 백틱을 사용할 수 있습니다).
스크립트에서 쉘 변수를 사용해야 하는 경우 sed
다음 예와 같이 작은따옴표와 큰따옴표를 함께 사용하세요.
var="bbb"
thing=foo
sed 's/aaa'"${var}"'ccc/some'"${thing}"'else/g'
이는 다음 연결로 더 잘 볼 수 있습니다.
's/aaa' + "${var}" + 'ccc/some' + "${thing}" + 'else/g'