Outils : vi et inversion de la chaîne de recherche

de | 2017-08-11

Admettons que vous ayez devant les yeux un bloc de code que vous souhaitez  commenter proprement, c’est à dire sans ajouter de commentaire devant les commentaires.

Exemple : une crontab générique :


# mm(0-59) hh(0-23) dd(1-31) MM(0-12) DAY(0-sunday, 1-monday, ...) command
# Eat
00 12 * * * * /bin/life/eat.sh
# Drink
00,15,30,45 * * * * /bin/life/drink.sh

Dans ce cas, l’expression régulière, dans vi, est (en mode édition) :


%s/^#\@!/#/g

Traduction : « Pour la totalité du fichier, remplace le début d’une ligne ne commençant pas par « # » par un commentaire ».

« % » = la totalité du fichier. Si vous souhaitez agir sur une partie seulement, remplacez-le par le numéro de la ligne de début et celui de fin, séparés par une virgule. Exemple « 10,20 ».

« s » = « substitute ». On demande un remplacement de ligne.

« /^#\@!/ » = première partie de l’expression. La chaîne que l’on cherche. « ^# » = « commençant par # … ». « \@! » = code pour inverser la recherche. Le genre de chose qui ne se devine pas.

« /#/ » = la seconde partie. La chaîne de remplacement.

« g » = faire pour chaque occurrence trouvée.

Au final, le fichier contiendra ceci :


#mm(0-59) hh(0-23) dd(1-31) MM(0-12) DAY(0-sunday, 1-monday, ...) command
# Eat
#00 12 * * * * /bin/life/eat.sh
# Drink
#00,15,30,45 * * * * /bin/life/drink.sh

Décidément, on n’a jamais fait le tour de Vi…

Des problèmes ? des questions ? Exprimez-vous ! Les commentaires sont ouverts. Coquilles et fautes de grammaires sont notre lot quotidien : signalez-les nous à m.capello@dbsqware.com