remplacement d'une chaîne de caractères dans un ensemble de fichiers... en ligne de commande
Par er:k le jeudi, janvier 12 2006, 17:13 - InformatiqueEtGeekeries - Lien permanent
J'ai eu besoin de remplacer sur un ensemble de fichiers la chaine de caractères "alice" par la chaine de caractères "bob", et j'ai donc profité de la puissance de la ligne de commande Linux/Unix. Voici ma solution :
rgrep alice * | cut -d ":" -f 1 | xargs sed -i -e 's/alice/bob/g'
rgrep permet de rechercher dans des fichiers de façon récursive. Il donne ici la liste des fichiers contenant le motif "alice" avec la ligne dans laquelle il est contenu
cut -d ":" -f 1 permet alors de séparer le résultat de la commande rgrep afin de n'avoir plus que le nom du fichier
xargs renvoie la sortie standard vers la commande indiquée
sed -i -e 's/alice/bob/g' effectue alors le remplacement (s//) de "alice" par "bob" dans la liste des fichiers donnée (par xargs)
j'avoue avoir bataillé avec les manpages pour trouver, surtout que j'ai cherché un bon moment avant de retrouver la commande cut que je n'utilise jamais et que j'avais oublié, pour le reste rgrep, xargs et sed... c'est facile !!!
en tout cas, merci Linux parce que je me demande comment j'aurais fait avec un autre système non aussi puissant (suivez mon regard...)
content ;-)
Commentaires
rgrep (grep */*/*/*/* ca doir marcher aussi) et xargs connait pas, le reste c'est du classique.
Moi (ne connaissant pas xarg) je fait un script de 3 lignes avec une boucle.
Ca serait bien que xargs soit sous AIX a verifeir demain.
Je n'ai pas l'impression que grep permette de faire des substitutions : ce n'est pas son rôle ! Néanmoins, me disant que peut-être le GNU grep n'était pas tout à fait le Unix grep, j'ai cherché, et il semble que les 2 soient équivalents et pas de substitution à l'horizon... AIX étant un Unix (je me trompe ?), son grep doit être le même.
ps : au fait, rgrep, c'est juste grep -rQuand à xargs, c'est génial (comme toutes ces petites commandes unix/linux d'ailleurs !), je l'ai découvert quand j'ai eu besoin de faire : "ls -la * |grep ^d | xargs chmod a+x" cad liste-moi tous les répertoires et ajoute le droit de les parcourir pour tout le monde.... magique, isn't it ? (commande que je ressors de tête donc il y a peut-être des erreurs)
Trop bien ... merci!!!!
merci tu me sauves :)