O shell é responsável por expandir variáveis. Quando você usa aspas simples para seqüências de caracteres, seu conteúdo será tratado literalmente, então sed
agora tenta substituir todas as ocorrências do literal $var1
por ZZ
.
Usando aspas duplas
Use aspas duplas para fazer o shell expandir as variáveis preservando os espaços em branco:
sed -i "s/$var1/ZZ/g" "$file"
Quando você precisar do caractere de aspas na string de substituição, terá que precedê-lo com uma barra invertida que será interpretada pelo shell. No exemplo a seguir, a string quote me
será substituída por "quote me"
(o caractere &
é interpretado por sed
):
sed -i "s/quote me/\"&\"/" "$file"
Usando aspas simples
Se você tiver muitos meta-caracteres do shell, considere usar aspas simples para o padrão e aspas duplas para a variável:
sed -i 's,'"$pattern"',Say hurrah to &: -i
s,bert,Say hurrah to &: Say hurrah to bert: sed -i "s/$var1/ZZ/g" "$file"
/
/,
text.txt
/,' "$file"
Observe como eu uso s,pattern,replacement,
em vez de s/pattern/replacement/
, eu fiz isso para evitar interferência com o /
em
. sed
/
Exemplo
O shell executa o comando acima pattern=bert
com os próximos argumentos (assumindo file=text.txt
e file.txt
):
sed -i "s/quote me/\"&\"/" "$file"
Se bert
contiver %code% , a saída será:
sed -i 's,'"$pattern"',Say hurrah to &: -i
s,bert,Say hurrah to &: Say hurrah to bert: %pre%/
/,
text.txt
/,' "$file"