Substituindo variável contendo \ com sed [duplicado]

1
    

Esta pergunta já tem uma resposta aqui:

    

Estou tentando substituir $old string por $new string no arquivo em que:

old=ESX_10.1.1.1\@11.11.11.11
new=host_15_11_0_111.static

Estou usando o comando sed:

sed i "s/${old}/${new}/g" /filename

mas não substitui a palavra e também não mostra nenhum erro. Eu tentei de várias maneiras, como substituir:

sed i "s,${old},${new},g" /filename

e

sed i "s=${old}=${new}=g" /filename

mas não funciona. Me ajude a resolver isso

    
por Rockey 10.06.2016 / 07:29

1 resposta

1

Você precisa escapar do \ com outro \ . Você pode fazer isso em uma variável do shell bash da seguinte forma

sed -i -e "s/${old//\/\\}/${new//\/\\}/g" filename

Veja man bash Expansão do Parâmetro para ${parameter/pattern/string} . Usamos a versão com // em vez de / para fazer isso repetidamente. E precisamos escapar de \ com ele mesmo, por isso é muito duplicado.

    
por 10.06.2016 / 08:20