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. obrigada
Primeiro você precisa citar sua
var1
variável.Você pode usar
bash -c
em seufind
comando para fornecer a senha como uma variável:isso pode ajudá-lo a entender o problema que você está tendo que saber que
&
é um caractere especial que representa toda a correspondência do seu regexp.uma vez que
1234
é encontrado, você o está substituindo porvar12342018+1234
, os dois&
estão se tornando a string correspondente.o outro ponto que eu gostaria de fazer é realmente uma preferência pessoal, mas usando
find ... -exec
with{}
, eu não gosto dessa sintaxe, costumo terminar com\;
Eu prefiro usar xargs
find . -name list.txt | xargs sed -i 's/1234/var&2018+&/g'
observe que a desinência g a substituiria quantas vezes for encontrada ...
também isso pode ser óbvio .. Eu não sei quantos
list.txt
arquivos você tem em sua subárvore, mas se você tiver apenas um, você não precisa defind
.sed -i 's/pattern/replacement/options' filename