Archives par mot-clé : chaine

Utilisation de sed

Aller cette fois si je jette mon dévolus sur sed.

J’ai besoin de remplacer une chaine par une autre dans un fichier, et ces chaines contiennent des caractères spéciaux de type /. Ce qui arrive très très souvent pour un PATH. Avec sed je vais donc devoit rajouter un \ devant chaque / (logique non ?).

Le PATH courant : /home/artiflo/monweb/rox
Le PATH qui va prendre la place du PATH courant : /home/artiflo/www/loutre
Le fichier qui va etre modifié : /etc/apache2/sites-avaible/artiflo.net

Alors on va commencer par tester le sed sur le fichier sans faire de modification. Sed va affichier le résultat dans la console sans modifier le fichier :

# sed « s/\/home\/artiflo\/monweb\/rox\//\/home\/artiflo\/www\/loutre\//g » /etc/apache2/sites-avaible/artiflo.net

Si le résultat affiché vous conviens alors vous pouvez le modifier en rajoutant -i. Il est recommandé de creer un fichier de backup au cas ou, vous pouvez faire cela en utilisant -i.bak.

# sed -i.bak « s/\/home\/artiflo\/monweb\/rox\//\/home\/artiflo\/www\/loutre\//g » /etc/apache2/sites-avaible/artiflo.net

Enfin il se peut que vous soyez un kikoolol et que vous ayez envie de faire la modification de chaine dans des fichiersde tout un répertoire et les sous répertoire.

# find . -name “*.php” -type f -exec sed -i “s/chaine1/chaine2/g” {} \;

J’ai rajouter la condition que les fichier doivent être des fichier php mais c’est complètement facultatif.

Utilisation de grep

Aller un petit mémo d’utilisation de grep pour rechercher une chaine dans un fichier.

Pour chercher la chaîne artiflo dans tous les fichiers du répertoire courant :

# grep artiflo *

Pour chercher la chaîne artiflo dans tous les fichiers du répertoire courant ainsi que dans les sous-répertoires (le caractère . est un chemin relatif qui désigne le répertoire courant) :

# grep -r artiflo .

Idem recherche précédente, mais en ne retournant que les noms des fichiers qui contiennent artiflo :

# grep -lr artiflo .

find est aussi trés sympa pour rechercher une chaine dans l’ensemble des fichier. Dans cet exemple je recherche la chaine Maxclients dans l’ensemble de l’ordinateur (/) sans spécifier un type de fichier -name « * ».

find / -name « * » -exec grep -Hn « MaxClients » {} \;