sed procura e substitui o problema

0

Estou tentando substituir uma string de um arquivo que contenha '&' em seu valor.

vari = '111|abc & efg|123'
varj = '222|abc & efg|123'

echo $vari | sed -e "s/$vari/$varj/g"

a saída é 222|abc 111|abc & efg|123 efg|123

Eu não sei como lidar com '&' em localizar e substituir variável. Alguém pode ajudar?

    
por girish chalke 29.09.2015 / 09:10

2 respostas

1

O caractere & em $varj tem um significado especial na parte de substituição de um comando s/search/replace/ . Isso significa "insira o texto correspondente aqui".

Você pode usar \& para "escapar" de & , para que não tenha um significado especial. Você pode usar sed para modificar $varj para substituir todos os & chars por \& :

varj=$(echo "$varj" | sed -e 's/\&/\\&/g')

Por exemplo:

cas@ganesh:/tmp$ ksh
$ vari='111|abc & efg|123'
$ varj='222|abc & efg|123'

$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc 111|abc & efg|123 efg|123

$ varj=$(echo "$varj" | sed -e 's/\&/\\&/g')
$ echo "$varj"
222|abc \& efg|123

$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc & efg|123
    
por 29.09.2015 / 10:29
0

Você precisa escapar do caractere & no texto de substituição. Isso ocorre porque & é um caractere especial para o texto de substituição. Então, deixe seu $varj ser o seguinte.

varj = '222|abc \& efg|123'

Você pode chamar sed da seguinte maneira.

echo $vari | sed -e "s/$vari/$varj/g"
    
por 29.09.2015 / 09:25