primeiro, há uma variável que contém caracteres especiais no script bash. aqui está o exemplo. lista.txt:
user = root
password = 1234
Script Bash:
#!/bin/sh
var1 = var&2018+&
find . -name "list.txt" -exec sed -i "s/1234/"$var1"/g" {} +
quando executei o script, o resultado é: var12342018+1234.
Atualização 1 (resposta de Oliv):
var1='var&2018+&'
find . -name "*list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
e o resultado ainda: senha = var12342018+1234
talvez alguém possa me ajudar. obrigado
Responder1
Primeiro você precisa citar sua var1
variável.
Você pode usar bash -c
em seu find
comando para fornecer a senha como uma variável:
var1='var\&2018+\&'
find . -name "list.txt" -exec bash -c 'sed -i "s/1234/$2/g" $1' _ {} "$var1" \;
Responder2
pode ajudá-lo a entender o problema que você está enfrentando, saber que &
é um caractere especial que representa toda a correspondência do seu regexp.
desde que 1234
foi encontrado, você está substituindo-o por var12342018+1234
, os dois &
estão se tornando a string correspondente.
o outro ponto que gostaria de ressaltar é realmente uma preferência pessoal, mas usando find ... -exec
with {}
, não gosto dessa sintaxe, geralmente termino com\;
Eu prefiro usar xargs
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
observe que o final g o substituiria quantas vezes fosse encontrado...
também isso pode ser óbvio. Não sei quantos list.txt
arquivos você tem em sua subárvore, mas se você tiver apenas um, não precisa find
.
sed -i 's/pattern/replacement/options' filename