O comando SED não substitui o bash no Debian, mas funciona na linha de comando.
Funciona na linha de comando:
sed -i 's|/dev/disk/by-label/SR6D4|/dev/disk/by-label/SR4D4|g' /etc/my/config.xml
Não funciona no script bash, não substitui a string:
from="SR6D4"
to="SR4D4"
path_from="/dev/disk/by-label/${from}"
path_to="/dev/disk/by-label/${to}"
echo "sed -i 's|${path_from}|${path_to}|g' $file"
sed -i 's|${path_from}|${path_to}|g' $file
Por que não substitui a string no arquivo ao usar sed no bash?
As variáveis de shell não serão expandidas entre aspas simples. (É para isso que servem as aspas simples.)
deve funcionar melhor. (Adicionei aspas duplas
$file
apenas no caso de seu nome de arquivo conter espaços.)Como mencionado anteriormente, você tem problemas com citações. Mas existem algumas opiniões sobre a substituição de strings no arquivo. Veja abaixo.
É uma má ideia substituir a string no arquivo porque é inseguro. Há uma pequena probabilidade de perda de dados do arquivo durante a alteração.
Você pode tentar fazer backup do arquivo antes de alterar:
e você obterá o arquivo com o nome
file.backup
.Você precisa se lembrar: se o seu arquivo for danificado e você for excluí-lo e substituí-lo - o arquivo terá um inode diferente e perderá todos os links físicos.
O segundo método de segurança:
O próximo ponto. Como o bashFAQ pensa :
É por isso que você precisa usar
awk
com-v
opções. Seu script pode ficar assim: