sed 호출에서 여러 백틱을 이스케이프 처리하세요.

sed 호출에서 여러 백틱을 이스케이프 처리하세요.

여러 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;

명령줄에 입력을 생성합니다. 하지만 뒤에 공백을 추가하면 $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'

관련 정보