59 votes

Pouvez-vous éditer en masse tous les fichiers retournés dans un grep?

Je veux éditer en masse une tonne de fichiers qui sont retournés dans un grep. (Je sais, je devrais devenir meilleur à sed).

Donc si je le fais:

 grep -rnI 'xg_icon-*'
 

Comment puis-je diriger tous ces fichiers dans vi?

86voto

jamessan Points 16420

Le moyen le plus simple consiste à faire en sorte que grep ne renvoie que les noms de fichiers ( -l au lieu de -n ) qui correspondent au modèle. Exécutez-le dans un sous-shell et transmettez les résultats à Vim.

 vim $(grep -rIl 'xg_icon-*' *)
 

25voto

Benj Points 12084

Une solution générale intéressante consiste à utiliser xargs pour convertir une sortie standard d’un processus tel que grep en liste d’arguments.

À la:

 grep -rIl 'xg_icon-*' | xargs vi
 

8voto

Jaen Points 21

Vous pouvez le faire sans aucun traitement de la sortie de grep! Cela vous permettra même d’aller dans la bonne direction (en utilisant les commandes :help quickfix , par exemple :cn ou :cw ). Donc, si vous utilisez bash ou zsh:

vim -q & lt (grep toto * .c)

2voto

ghostdog74 Points 86060

si ce que vous voulez éditer est similaire pour tous les fichiers, inutile d'utiliser vi pour le faire manuellement. (bien que vi puisse aussi être scripté), hypothétiquement, ça ressemble à ça, puisque vous ne mentionnez jamais ce que vous voulez éditer

 grep -rnI 'xg_icon-*' | while read FILE
do
    sed -i.bak 's/old/new/g' $FILE # (or other editing commands, eg awk... )
done
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X