Passando uma variável para sed [duplicada]

11

Não consigo usar uma variável de shell em sed no formulário $NUMBER . Eu tenho essa linha no meu script de shell:

cat shared.txt sed 's/whatever1/$2 ... whatever2/' > shared2.txt

O resultado em shared2.txt é semelhante a:

...$2....

O que eu fiz de errado?

    
por user2013619 23.07.2013 / 09:06

2 respostas

16

Tente usar aspas duplas em vez de aspas simples:

sed "s/whatever1/$2 ... whatever2/" shared.txt > shared2.txt
    
por 23.07.2013 / 09:12
4

Ao usar aspas duplas, há certas circunstâncias em que isso não dará o que você deseja. Por exemplo,

t="bcd"
echo '123$tbcd' | sed "s/$t$t//"

(sim, isso é um pouco inventado!). Você pode evitar isso escapando de determinados caracteres:

echo '123$tbcd' | sed "s/\$t$t//"

mas é fácil perder isso. A maneira mais segura, na minha opinião, é cercar as variáveis com aspas duplas (para que os espaços não travem o comando sed) e cercar o resto da string com aspas simples (para evitar a necessidade de escapar certos caracteres): / p>

echo '123$tbcd' | sed 's/$t'"$t"'//'.
    
por 23.07.2013 / 12:30