web-dev-qa-db-fra.com

Rechercher et remplacer dans un script shell

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.

10
Amanada Smith

Bien sûr, vous pouvez le faire en utilisant sed ou awk. exemple sed:

sed -i 's/Andrew/James/g' /home/oleksandr/names.txt
24

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.

8
octopusgrabbus
sed -i 's/variable/replacement/g' *.conf
3
embedded.kyle

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.

1
Flashpix
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
1
user68775

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
0
Paulo Scardine