Eu tentei o seguinte código para substituir QQ
com ZZ
, mas não faz o que eu quero:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
No entanto, este código faz o que eu quero:
sed -i 's/QQ/ZZ/g' $file
Como uso variáveis em sed
?
command-line
bash
sed
UAdapter
fonte
fonte
Respostas:
O shell é responsável pela expansão de variáveis. Quando você usa aspas simples para seqüências de caracteres, seu conteúdo será tratado literalmente,
sed
agora tenta substituir todas as ocorrências do literal$var1
porZZ
.Usando aspas duplas
Use aspas duplas para fazer com que o shell expanda variáveis, preservando o espaço em branco:
Quando você precisar do caractere de citação na string de substituição, precisará preceder com uma barra invertida que será interpretada pelo shell. No exemplo a seguir, a sequência
quote me
será substituída por"quote me"
(o caractere&
é interpretado porsed
):Usando aspas simples
Se você possui muitos metacaracteres shell, considere usar aspas simples para o padrão e aspas duplas para a variável:
Observe como eu uso, em
s,pattern,replacement,
vez des/pattern/replacement/
, fiz isso para evitar interferência no/
in\0/
.Exemplo
O shell então executa o comando acima
sed
com os próximos argumentos (assumindopattern=bert
efile=text.txt
):Se
file.txt
contiverbert
, a saída será:fonte
g
opção, então você passarias,foo,bar,g
.\\0
, em vez de\0
, não deve ser feito quando\0
é colocado entre aspas simples. Caso contráriosed
, substituirá o padrão por um literal em\0
vez de por toda a correspondência.Podemos usar variáveis
sed
usando aspas duplas:Se você tiver uma barra
/
na variável, use um separador diferente, como abaixo:fonte
/
na variável => Isso me salvou! Minha variável é um URL e contém/
. Mudar para usar|
como separador fixo meu problema