Escape entrada de string para sed

0

Estou tendo alguns problemas com a substituição de uma string em um arquivo usando sed com uma string que contém novas linhas. O seguinte falhará completamente. Eu suponho que tenho que escapar da string replace_with, mas não posso descobrir como, ou se esta é a melhor maneira de fazê-lo. Qualquer ajuda seria apreciada

REPLACE_WITH="Blah
 de
 blah."

sed -i "s/TO_REPLACE/$REPLACE_WITH/g" file
    
por David Davies-Jones 21.02.2015 / 14:28

1 resposta

0

Isso precisa de "double escaping", mas os caracteres de escape precisam chegar ao comando "s" do sed, então eles também precisam ser escapados da shell bash. ("Triple escaping"?)

REPLACE_WITH="Blah\
de\
blah."

sed -i "s/TO_REPLACE/$REPLACE_WITH/g" file

Bash decodifica o "\\" em um único "\" e coloca um único '\' no comando send que o comando sed interpreta como '\ {newline}', o que significa uma nova linha que não termine o comando.

Se você tivesse apenas um '\' no final de cada linha, o bash veria o '\ {newline}', o que seria um 'nada', isto é: a nova linha e a barra invertida são completamente removidas.

Regra básica para o bash-sed-awk ... se as barras invertidas não estiverem funcionando, tente duplicá-las ... novamente.

    
por 21.02.2015 / 16:13

Tags