2013-07-22 5 views
0

Je voudrais extraire des données d'un document avec VIM en utilisant l'expression régulière, mais j'ai seulement besoin de la correspondance exacte et pas la ligne de trou. Fondamentalement, il suffit de copier quoi:% s remplacerait.VIM regexp copie exacte correspondance

Exemple simple:

<td>sell:8092.23</td> 
<td>buy:850.00</td> 
<td>sell:99.99</td> 

... et extraire les numéros:

8092.23 
850.00 
99.99 

Est-ce possible et si VIM comment? Merci d'avance.

+0

Voulez-vous que les lignes remplacées? voulez-vous que les chiffres soient imprimés à l'écran? – FDinoff

+0

Je me fous de savoir s'ils sont remplacés ou juste dans un registre, j'ai juste besoin d'eux dans ce format quelque part. Les remplacer serait ma méthode préférée cependant. – Tharre

Répondre

1

essayez ceci:

%s/\v.{-}([0-9.]+).*/\1/ 
+0

Ah c'est exactement ce que je cherchais. Merci beaucoup! – Tharre

1

Utilisez une expression régulière avec des ancres au début et à la fin de la ligne, effectuez un regroupement pour conserver les nombres et remplacez la ligne entière par celle-ci. Exécutez la commande suivante à partir du shell et il va créer un nouveau fichier output.txt avec les numéros laissant le fichier d'entrée non modifiée:

vim -u NONE -N -c ' 
    set backup | 
    %s/\v^\D+(\d+\.\d*).*$/\1/ | 
    saveas! output.txt | 
    q! 
' infile 
+0

Cela fonctionne, mais il semble être beaucoup trop d'efforts pour une tâche aussi simple. – Tharre

+1

@Tharre suffit de prendre le '% s/\ v^\ D + (\ d + \. \ D *). * $/\ 1 /' partie – FDinoff

+0

@Tharre: ** FDinoff ** a raison. Vous pouvez vous débarrasser de l'instruction 'set backup' car le fichier d'origine n'est pas modifié. Et la commande entière crée un nouveau fichier avec le contenu que vous voulez. Il ne semble pas trop de code pour cette tâche. Mais à partir de 'vim', faites juste ce que ** FDinoff ** dit. – Birei

Questions connexes