Escapando de vários crases em uma chamada sed

Escapando de vários crases em uma chamada sed

Preciso realizar pesquisa e substituição iterativamente em diversas instruções SQL:

De:

CREATE TABLE `Old_Name` (

Para:

ALTER TABLE `Old_Name` RENAME TO `New_Name`

A consulta acima contém crases `. Eu tentei fazer o seguinte

sed -i -r "s/CREATE TABLE \`$search\` \(/ALTER TABLE \`$search\` RENAME TO \`$replacement\`/g" /query.txt;

Em vez disso, ele cria uma entrada na linha de comando. Mas se eu adicionar um espaço atrás $replacement, ele funciona normalmente. Mas eu não quero o espaço depois New_Name.

Observe que não sei se isso é realmente causado pelos crases ou pode ser um problema de interpolação de nome de variável. Independentemente do caso, como posso resolver esse problema?

Responder1

Para reduzir o escape ao mínimo, sugiro usar aspas simples com sed, como em

sed 's/pattern/repl/g'

(entre aspas simples você pode usar livremente o backtick sem medo e sem escapar).
Se você precisar usar uma variável shell no sedscript, coloque aspas simples e aspas duplas como no exemplo a seguir

var="bbb"
thing=foo
sed 's/aaa'"${var}"'ccc/some'"${thing}"'else/g'

isso poderia ser melhor visto como a seguinte concatenação

's/aaa' + "${var}" + 'ccc/some' + "${thing}" + 'else/g'

informação relacionada