J'aime utiliser la commande globale vim pour accomplir des tâches comme celle-ci. Cela s'applique à l'ajout d'une itération au début d'une ligne ou à la modification d'un symbole dans le texte. Cela semble plus compliqué que les autres solutions, mais c'est un modèle assez flexible à utiliser lorsque vous l'avez à portée de main, et il est facile à modifier sans beaucoup de réflexion.
Tout d'abord, choisissez votre plage (quelles lignes vous souhaitez appliquer). J'utilise généralement des marques (par exemple ma
sur la première ligne et mb
sur la seconde, mais vous pouvez également utiliser des numéros de ligne ou une sélection visuelle), puis entrez une modification de la commande suivante (actuellement modifiée pour votre cas d'utilisation)
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
Déconstruction
:let i=1
Cela définit une variable i
avec une valeur de départ. Habituellement, les listes commencent par 1, donc je mets i à 1.
|
La barre démarre une nouvelle commande
'a,'b
Cela définit la plage de la commande suivante. Je vais de marque a
en marque b
, ce qui serait défini sur la première ligne et la dernière ligne de votre liste.
g/^/
Ceci est la commande globale. Il recherche dans le fichier (ou la plage) une expression régulière donnée et exécutera le reste de la ligne de commande sur chacune des lignes correspondantes. Je fais correspondre chaque ligne en recherchant "début de ligne". Si vous aviez du texte comme
Item some txt
other text
Item second item
whatever
Item third
et veulent seulement mettre ces étiquettes devant Item
et ignorer les autres lignes, faites g/Item/
ou à la g/^Item/
place (en supposant le texte littéral de l'article)
s/^/\=i.". "/
Cela exécute l'expression régulière pour remplacer le début de la ligne par la valeur de i
concaténé avec a .
. En général, vous pouvez le faire pour n'importe quoi (remplacez l'étiquette Item
par le numéro, par exemple).
|let i=i+1
Même si la barre démarre une nouvelle commande, elle configure une deuxième commande à exécuter dans la commande globale, au lieu de la fin de la commande globale. Le résultat est que nous incrémentons i
avant que la ligne suivante soit traitée par g. Voici un autre lieu de flexibilité. La modification de i peut être n'importe quoi (incrémenter de 2, appeler une fonction qui génère l'élément suivant de la séquence de Fibonacci, peu importe).
awk
est probablement l'outil pour ce travail. Mais je suis sous Windows (soupir).