Escapando vários backticks em uma chamada sed

7

Eu preciso executar a pesquisa e a substituição de forma iterativa em várias instruções SQL:

De:

CREATE TABLE 'Old_Name' (

Para:

ALTER TABLE 'Old_Name' RENAME TO 'New_Name'

A consulta acima contém backticks ' . Eu tentei fazer o seguinte

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

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

Note que não sei se isto é realmente causado pelos backticks ou pode ser um problema de interpolação de nomes de variáveis. Independentemente do caso, como posso resolver este problema?

    
por Question Overflow 10.05.2014 / 08:51

1 resposta

9

Para reduzir o mínimo ao escape, 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 fugir). Se você precisar usar a variável shell no script sed , coloque aspas simples e aspas duplas como no exemplo a seguir

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

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

's/aaa' + "${var}" + 'ccc/some' + "${thing}" + 'else/g'
    
por 10.05.2014 / 09:06