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?
Le moyen le plus simple consiste à faire en sorte que grep ne renvoie que les noms de fichiers (-l
au lieu de -n
) correspondant au modèle. Exécutez-le dans un sous-shell et transmettez les résultats à Vim.
vim $(grep -rIl 'xg_icon-*' *)
Une bonne solution générale 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
si vous utilisez vim et l'option -p, chaque fichier sera ouvert dans un onglet et vous pourrez basculer entre eux en utilisant gt ou gT, ou même la souris si vous avez un support de souris dans le terminal.
Vous pouvez le faire sans aucun traitement de la sortie de grep! Cela vous permettra même d’aller dans la bonne ligne (en utilisant les commandes :help quickfix
, par exemple :cn
ou :cw
). Donc, si vous utilisez bash ou zsh:
vim -q & lt (grep foo * .c)
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
vi `grep -l -i findthisword *`