Como usar variáveis no comando sed

4

Estou tentando executar

sed -i "/$variable/c \$variable1' file.txt

Mas não está exibindo nenhuma alteração no arquivo: file.txt .

Mas o mesmo comando, sem as variáveis, funciona bem:

sed -i "/variable/c \variable1' file.txt
    
por John 03.01.2015 / 08:34

1 resposta

4

Faça assim:

sed -i "/$variable/c \${variable}1" file.txt

Mudanças:

  1. Se você tem um \ antes de um $ , ele faz o shell inserir um literal $ na string. Em vez disso, coloque um \ extra para escapar do primeiro, para que, literalmente, \ seja impresso.

  2. Se sua variável tiver letras ou números imediatamente depois dela, coloque o nome em {...} , isso diferencia sua variável de um não existente variable1 (se uma variável não existir, o shell a expandirá para nada em vez de procurar um nome mais curto que o faça).

  3. Seja consistente com suas citações, você começou com um " , então não termine com ' ! As variáveis são expandidas apenas entre aspas duplas, de qualquer forma.

Note que para depurar coisas como essa você pode usar echo , olhando para a saída, o comando abaixo mostrará o que deu errado:

echo sed -i "/$variable/c \$variable1" file.txt

Compare-o com

echo sed -i "/$variable/c \${variable}1" file.txt
    
por 03.01.2015 / 08:51