En mode édition, Vi(m) permet de faire de la modification massive de fichiers sur tout ou partie de celui-ci.
Par exemple pour faire de la substitution de texte, il est possible d'utiliser "s". Pour remplacer la première occurence de "toto" par "titi" dans un fichier, il suffit de taper la séquence suivante en mode commande :
:s/toto/titi/
s pour substitute, ensuite on fait comme avec sed, on positionne entre /// la regexp source puis la chaine cible. Il est d'usage d'utiliser le / comme caractère de séparation, mais on peut aussi en utiliser d'autres (tels que !, :, ... et l'expression devient alors :s!toto!titi!), ce qui est pratique lorsque la regexp contient des '/' A noter que cette commande ne se fera que sur la ligne courante.
Pour faire la modification sur plusieurs lignes, il suffit de spécifier les lignes sur lesquelles on veut faire la modif
:2s/toto/titi/
Cette commande va remplacer la première expression 'toto' par 'titi' en ligne 2. Pour le faire sur plusieurs lignes :
:1,3s/toto/titi/
Cette commande va remplacer la première expression 'toto' par 'titi' sur les lignes 1 à 3. Pour le faire sur la totalité du fichier :
:1,$s/toto/titi/
Le remplacement se fera de la ligne 1 à la dernière ligne, symbolisée par le caractère '$'
Autre point : pour remplacer la totalité des occurences de l'expression régulière sur une ligne plutôt que la première, il suffit d'ajouter un 'g' à la fin de la commande :
:1,$s/toto/titi/g
Ici on remplacera, dans tous le fichier (1,$) l'expression 'toto' par 'titi' sur toutes les lignes. Il existe d'autres flags que 'g' (utilisés également avec sed et awk) que je ne détillerai pas ici pour éviter d'embrouiller, mais vous pouvez aller voir cette documentation. Ce sont plus ou moins les mêmes que pour sed.
Nous avons vu comment remplacer du texte dans ceraines lignes via des regexp. Maintenant commant les supprimer ?
Il suffit d'utiliser 'g' comme ceci pour supprimer par exemple toutes les lignes contenant l'expression toto dans le fichier :
:g/toto/
Ici, pas besoin de spécifier les lignes sur lesquelles la commande s'exécutera, elle se fera sur l'ensemble du fichier. Toutes les lignes contenant 'toto' seront supprimées.
Du coup pour répondre à ta question, il te suffit d'identifier dans ton fichier une expression qui te permet de distinguer un répertoire d'un fichier, et d'utiliser la commande que je t'ai donnée au dessus. Je te laisse chercher un peu la regexp à utiliser ....
# Il suffit d'analyser la liste
Posté par totof2000 . En réponse au message Vim - Affichage des répertoires sur d'une liste. Évalué à 4. Dernière modification le 06 octobre 2024 à 11:42.
En mode édition, Vi(m) permet de faire de la modification massive de fichiers sur tout ou partie de celui-ci.
Par exemple pour faire de la substitution de texte, il est possible d'utiliser "s". Pour remplacer la première occurence de "toto" par "titi" dans un fichier, il suffit de taper la séquence suivante en mode commande :
s pour substitute, ensuite on fait comme avec sed, on positionne entre /// la regexp source puis la chaine cible. Il est d'usage d'utiliser le / comme caractère de séparation, mais on peut aussi en utiliser d'autres (tels que !, :, ... et l'expression devient alors :s!toto!titi!), ce qui est pratique lorsque la regexp contient des '/' A noter que cette commande ne se fera que sur la ligne courante.
Pour faire la modification sur plusieurs lignes, il suffit de spécifier les lignes sur lesquelles on veut faire la modif
Cette commande va remplacer la première expression 'toto' par 'titi' en ligne 2. Pour le faire sur plusieurs lignes :
Cette commande va remplacer la première expression 'toto' par 'titi' sur les lignes 1 à 3. Pour le faire sur la totalité du fichier :
Le remplacement se fera de la ligne 1 à la dernière ligne, symbolisée par le caractère '$'
Autre point : pour remplacer la totalité des occurences de l'expression régulière sur une ligne plutôt que la première, il suffit d'ajouter un 'g' à la fin de la commande :
Ici on remplacera, dans tous le fichier (1,$) l'expression 'toto' par 'titi' sur toutes les lignes. Il existe d'autres flags que 'g' (utilisés également avec sed et awk) que je ne détillerai pas ici pour éviter d'embrouiller, mais vous pouvez aller voir cette documentation. Ce sont plus ou moins les mêmes que pour sed.
Nous avons vu comment remplacer du texte dans ceraines lignes via des regexp. Maintenant commant les supprimer ?
Il suffit d'utiliser 'g' comme ceci pour supprimer par exemple toutes les lignes contenant l'expression toto dans le fichier :
Ici, pas besoin de spécifier les lignes sur lesquelles la commande s'exécutera, elle se fera sur l'ensemble du fichier. Toutes les lignes contenant 'toto' seront supprimées.
Du coup pour répondre à ta question, il te suffit d'identifier dans ton fichier une expression qui te permet de distinguer un répertoire d'un fichier, et d'utiliser la commande que je t'ai donnée au dessus. Je te laisse chercher un peu la regexp à utiliser ....