J'essaie d'écrire un script bash qui prend quelques variables, puis effectue une recherche/remplacement avec une recherche de fichier donnée en utilisant grep pour obtenir la liste des fichiers qui ont la chaîne. Je pense que le problème que j'ai est de voir les variables dans sed.Je ne sais pas trop ce que cela pourrait être.
if [ "$searchFiles" != "" -a "$oldString" != "" -a "$newString" != "" ]; then
echo -en "Searching for '$searchFiles' and replacing '$oldString' with '$newString'.\n"
for i in `grep $oldString $searchFiles |cut -d: -f1|uniq`; do
sed -i 's/${oldString}/${newString}/g' $i;
done
echo -en "Done.\n"
else
usage
fi
utilisez des guillemets doubles pour que le Shell puisse remplacer des variables.
for i in `grep -l $oldString $searchFiles`; do
sed -i "s/${oldString}/${newString}/g" $i;
done
si votre chaîne de recherche ou de remplacement contient des caractères spéciaux, vous devez les échapper: Échapper une chaîne pour un modèle de remplacement sed
Utilisez des guillemets doubles pour que les variables d'environnement soient développées par le Shell avant d'appeler sed:
sed -i "s/${oldString}/${newString}/g" $i;
Attention: si oldString
ou newString
contiennent des barres obliques ou d'autres caractères spéciaux de l'expression rationnelle, ils seront interprétés comme leur signification spéciale, et non comme des chaînes littérales.