O comando de substituição de Sed normalmente usa /
como o delimitador entre o comando s
, a sequência de pesquisa, a sequência de substituição e quaisquer sinalizadores. Se, no entanto, a string de pesquisa ou a string de substituição puder conter /
, as pessoas alterarão o delimitador para um caractere que não seja em nenhuma das strings.
Você recebeu o outro erro do sed quando lhe disse para usar uma string vazia como extensão de backup; já que você não está usando uma extensão, não coloque as aspas vazias.
Sed não se importa com o que o delimitador é, mas o seu shell ao redor pode.
O símbolo |
introduz um pipe. Para usá-lo como um delimitador, você teria que citá-lo de alguma forma para protegê-los do shell.
O símbolo #
pode introduzir uma sequência de comentários, com base no seu shell (bash só inicia um comentário se o #
for o primeiro caractere de uma palavra), então é melhor ser seguro e citá-lo.
Como seus dados contêm /
caracteres, você precisa usar um delimitador diferente ou escapar de todas as instâncias de /
nas sequências de pesquisa e de substituição. Isso leva ao que é conhecido como síndrome do palito inclinado devido à aparência de difícil leitura do \/
.
Assim, você precisa de algo como:
find . -type f -name 'file.sql' -exec sed -i -e 's#http://a.com#http://b.com#g' {} +
ou
find . -type f -name 'file.sql' -exec sed -i -e 's|http://a.com|http://b.com|g' {} +
ou
find . -type f -name 'file.sql' -exec sed -i -e "s|http://a.com|http://b.com|g" {} +
ou
find . -type f -name 'file.sql' -exec sed -i -e 's/http:\/\/a.com/http:\/\/b.com/g' {} +