Eu gostaria de substituir $fileWithPath
em $file
, no entanto, isso não funciona porque (eu acho) caminho não é escapado. Como escapar disso?
sed -i 's/${fileWithPath}/HAHA/g' $file
sed -i 's|'$fileWithPath'|HAHA|g' file
Aspas simples definem uma string literal. Colocar a variável fora do literal permite que o shell expanda essa parte.
Além disso: se você estiver analisando caminhos, use um delimitador no comando sed que não confunda com o delimitador de diretório "/".
$fileWithPath
contiver espaço em branco, o padrão incorreto será inserido.sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
parece funcionar.Uma maneira melhor de seqüências de caracteres literais com barras:
fonte
Nas circunstâncias em que a cadeia de substituição ou a cadeia de padrão contenha barras, você pode usar o fato de que o GNU sed permite um delimitador alternativo para o comando substitute. Opções comuns para o delimitador são o caractere de barra | ou o hash # - a melhor opção para delimitar caracteres geralmente depende do tipo de arquivo que está sendo processado. No seu caso, você pode tentar
O caractere 'g' após o último # é usado para alterar todas as ocorrências no arquivo se você precisar alterar apenas a primeira ocorrência e remova o 'g'.
fonte