Remplacer une chaîne de caractère dans plusieurs fichiers

2004/05/09

Code:

for fichier in *_desc.htm; do sed -r "s/#IMPLIED/<span class=\"attr_implied\">#IMPLIED<\/span>/" $fichier > $fichier~; cp $fichier{~,}; done

Explications: recherche tous les fichiers dans le répertoire en cours qui finissent par _desc.htm. Ensuite j'exécute sur chacun la commande sed ( éditeur en ligne ) qui remplace la chaine #IMPLIED par <span class="attr_implied">#IMPLIED</span>. Puisque la commande sed envoit normalement le résultat à l'écran, je redirige vers > un nouveau fichier (sinon ca l'efface tout). Ensuite je copie le contenu du nouveau fichier dans l'ancien. cp $fichier{~,} signifie: cp $fichier~ $fichier

Merci à Robin Millette pour le support (irc://irc.freenode.org/#linux-quebec)

Recherche une chaîne dans des fichiers PHP

find . -regex ".+\.php" -print -exec grep "abc" {} \;

Cette commande retourne la liste de tous les fichiers PHP et affiche la ligne qui contient la chaine "abc" lorsqu'elle existe.

find . -regex ".+\.php" -exec grep "abc" {} /dev/null \;

Cette commande retourne la liste des fichiers PHP qui contiennent la chaine "abc" et en plus affiche la ligne!.

find . -type f -print0 | xargs -0 fgrep -l "test"

Retourne la liste des fichiers qui contiennent la chaine "test" plus efficacement qu'avec un -exec.