6
votes

Comment extraire le texte correspondant à une regex à l'aide de Vim?

Je voudrais extraire des données d'un texte avec Vim .. Les données sont de ce type: xxx

Les données que j'ai besoin pour extraire sont contenues dans: titre = "(168,72)".
En particulier, je suis intéressé à n'exprimer que ces coordonnées.

Je pense qu'à utiliser Vim pour tout d'abord supprimer tout avant titre = " .. mais je ne suis pas vraiment un gourou de regex. . Donc je vous demande: si quelqu'un a un indice: s'il vous plaît dites-moi :)


1 commentaires

Comme une autre utilisation de VIM posté de l'expression de flux est très puissante. Ces manipulateurs de flux sont également disponibles avec Whit SED (presque la même chose que le :% ). Si vous souhaitez en savoir plus sur ces expressions, consultez ce Introduction SED .


4 Réponses :


4
votes

Ceci remplacera chaque ligne avec une liste délimitée par tabulation des coordonnées par ligne:

:%s/.* title="(\(\d\+\),\(\d\+\))".*/\1\t\2


0 commentaires

0
votes

Vous pouvez tout correspondre à tout le titre = () et supprimer tout ce que ceci:

:%s,.*title="(\(.*\))".*,\1,


0 commentaires

3
votes

Si vous souhaitez une solution ad hoc pour ce cas ponctuel, il peut être plus rapide de sélectionner simplement un bloc visuel à l'aide de Ctrl-V . Cela vous permettra de sélectionner une colonne de texte arbitraire (dans votre cas, la colonne contenant title = "(x, y)" ), qui peut ensuite être copiée comme d'habitude en utilisant y .


1 commentaires

Ouais une série de cerveaux rapide Je trouve mon auto utilisation est: ^ vgx ....... juger le nombre de répétitions (. ) visuellement - pragmatique mais fonctionne Bien 80% des cas



4
votes

Cette tâche peut être obtenue avec une solution beaucoup plus simple et avec quelques frappes de frappe à l'aide de la commande normale:

:5,10normal df(f)D


2 commentaires

Façon intéressante de faire cela sans macros


La commande normale est un outil très puissant. C'est presque une "macro une fois".