Como escapar do caminho do arquivo no SED?

30

Eu gostaria de substituir $fileWithPath em $file , mas isso não funciona porque (eu acho) o caminho não é escapado. Como escapar disso?

sed -i 's/${fileWithPath}/HAHA/g' $file
    
por UAdapter 07.11.2011 / 17:10

3 respostas

59
sed -i 's|'$fileWithPath'|HAHA|g' file

Aspas simples definem um literal de string. Colocar a variável fora do literal permite que o shell expanda essa parte.

Além disso: se você for analisar caminhos, use um delimitador no comando sed que não confunda com o delimitador de diretório "/".

    
por ata 07.11.2011 / 17:40
12

Uma maneira melhor de strings literais com barras:

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
    
por Jeff Lancaster 30.10.2013 / 00:46
12

Em circunstâncias em que a string de substituição ou string padrão contenha barras, você pode usar o fato de que o GNU sed permite um delimitador alternativo para o comando substituto. As opções comuns para o delimitador são o caractere de pipe | ou o hash # - a melhor opção de caractere delimitador geralmente dependerá do tipo de arquivo que está sendo processado. No seu caso, você pode tentar

sed -i 's#'$fileWithPath'#HAHA#g' $file

O caractere 'g' depois da última # é usado para alterar todas as ocorrências no arquivo se você precisar alterar apenas a primeira ocorrência e, em seguida, remover o 'g'.

    
por c0m3t 28.10.2014 / 09:24

Tags