2009-09-02 6 views
3

J'ai un gros fichier avec des lignes qui ressemblent àvim, texte reformater à initializers

2 Aucun itinéraire vers le transit spécifié réseau

3 Pas de route vers la destination

-à-dire un nombre au début d'une ligne suivi d'une description.

Et je voudrais transformer ce pour une utilisation en tant que initialiseur struct

{2, "Aucun itinéraire vers le réseau de transport spécifié"},

{3, "Pas de route vers la destination "},

Comment est-ce que je ferais ceci?

Répondre

8

Essayez

:%s/^\(\d\+\)\s\(.*\)$/{\1, "\2"},/ 

Cette recherche utilise et remplacer et recherche une ligne commençant par un chiffre, suivi par un espace, suivi d'un texte arbitraire jusqu'à la fin de la ligne. Ceci est remplacé par le motif que vous avez spécifié.

Ou, en utilisant « plus magique » (grâce à Al dans les commentaires):

:%s/\v^(\d+)\s(.*)$/{\1, "\2"},/ 
+0

+1. Et utilisez '\ d *' au lieu de '\ d' si certains des nombres ont plusieurs chiffres. – Stephan202

+0

Ajusté pour mon but à% s/^ \ (\ d * \) [] * \ s \ (. * \) $/{\ 1, "\ 2"}, /. Merci. –

+4

@ Stephan202: \ d \ + pourrait être meilleur que \ d * si vous voulez vous assurer qu'il y a au moins un chiffre. En outre, vous pouvez enregistrer un peu de backslashing avec ':% s/\ v^(\ d +) \ s (. *) $/{\ 1," \ 2 "}, /' (': help \ v') . Si vous êtes sûr qu'ils seront toujours des espaces, vous pouvez simplement faire ':% s/\ v^(\ d +) + (. *) $/{\ 1," \ 2 "}, /' – DrAl

Questions connexes