substituindo string em vários arquivos

1

Estou pegando carona em uma pergunta existente - não sei como adicionar isso a essa pergunta. Os exemplos que vejo substituem uma única string - preciso substituir várias strings.

Eu estou tentando mudar a mesma string que existe em vários arquivos em um diretório usando 'sed'. A string tem várias palavras. O modelo que estou usando é:

sed -i 's/oldstring/newstring/g' test.txt

Eu quero alterar vários arquivos no mesmo diretório, ou seja, alterar a string:

&VARIABLE1 = 10000000

para

&VARIABLE = 1

Quando eu uso o seguinte

sed -i 's/&VARIABLE1 = 10000000/&VARIABLE = 1/g' *.txt

Não faz a substituição corretamente.

O que estou fazendo de errado?

    
por postgres_user_99 04.05.2018 / 15:17

1 resposta

2

O caractere & tem um significado especial no lado de substituição de um comando sed s :

          replacement may contain the special character & to refer to that
          portion  of  the  pattern  space  which matched, and the special
          escapes  through  to refer  to  the  corresponding  matching
          sub-expressions in the regexp.

Para torná-lo literal, você precisa escapar, \&

Ex.

$ echo '&VARIABLE1 = 10000000' | sed 's/&VARIABLE1 = 10000000/&VARIABLE = 1/g'
&VARIABLE1 = 10000000VARIABLE = 1

mas

$ echo '&VARIABLE1 = 10000000' | sed 's/&VARIABLE1 = 10000000/\&VARIABLE = 1/g'
&VARIABLE = 1
    
por steeldriver 04.05.2018 / 15:21