Est-il possible de rechercher dans un fichier à l'aide de Shell puis de remplacer une valeur? Lorsque j'installe un service, j'aimerais pouvoir rechercher une variable dans un fichier de configuration, puis remplacer/insérer mes propres paramètres dans cette valeur.
Bien sûr, vous pouvez le faire en utilisant sed ou awk. exemple sed:
sed -i 's/Andrew/James/g' /home/oleksandr/names.txt
Vous pouvez utiliser sed pour effectuer une recherche/remplacement. Je le fais habituellement à partir d'un script shell bash, déplace le fichier d'origine contenant les valeurs à substituer à un nouveau nom, puis exécute sed en écrivant le résultat sous mon nom de fichier d'origine, comme suit:
#!/bin/bash
mv myfile.txt myfile.txt.in
sed -e 's/PatternToBeReplaced/Replacement/g' myfile.txt.in > myfile.txt.
Si vous ne spécifiez pas de sortie, le remplacement ira à stdout.
sed -i 's/variable/replacement/g' *.conf
Vous pouvez utiliser sed pour faire ceci:
sed -i 's/toreplace/yoursetting/' configfile
sed est probablement disponible sur tous les systèmes de type Unix. Si vous souhaitez remplacer plusieurs occurrences, vous pouvez ajouter un g à la commande s:
sed -i 's/toreplace/yoursetting/g' configfile
Faites attention car cela peut détruire complètement votre fichier de configuration si vous ne spécifiez pas correctement votre valeur de toreplace. sed prend également en charge les expressions régulières lors de la recherche et du remplacement.
filepath="/var/start/system/dir1"
searchstring="test"
replacestring="test01"
i=0;
for file in $(grep -l -R $searchstring $filepath)
do
cp $file $file.bak
sed -e "s/$searchstring/$replacestring/ig" $file > tempfile.tmp
mv tempfile.tmp $file
let i++;
echo "Modified: " $file
done
Généralement, un outil comme awk ou sed est utilisé pour cela.
$ sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt