извлечь текст с помощью vim - PullRequest
5 голосов
/ 03 июля 2011

Я хотел бы извлечь некоторые данные из текста с помощью vim .. данные такого типа:

72" title="(168,72)" onmouseover="posizione('(168,72)');" onmouseout="posizione('(-,-)');">>
72" title="(180,72)" onmouseover="posizione('(180,72)');" onmouseout="posizione('(-,-)');">>
72" title="(192,72)" onmouseover="posizione('(192,72)');" onmouseout="posizione('(-,-)');">>
72" title="(204,72)" onmouseover="posizione('(204,72)');" onmouseout="posizione('(-,-)');">>

Данные, которые мне нужно извлечь, содержатся в: title = "(168,72)".
В частности, я заинтересован в извлечении только этих координат.

Я думаю об использовании vim для первого удаления всего до title = " .. но я на самом деле не гуру регулярных выражений .. поэтому я спрашиваю вас: если у кого-нибудь есть подсказка: пожалуйста, скажите мне :)

Ответы [ 4 ]

4 голосов
/ 04 июля 2011

Эта задача может быть решена с помощью гораздо более простого решения и нескольких нажатий клавиш с помощью обычной команды:

:%normal df(f)D

Это означает:

  1. % - запустить обычную команду для всех строк файла;
  2. normal - запустить следующие команды в обычном режиме;
  3. df( - удаляйте все, пока не найдете скобки (включая скобки);
  4. f) - переместить курсор в);
  5. D - удалить все до конца строки.

Вы также можете установить диапазон, например, запустите его от строки 5 до 10:

:5,10normal df(f)D
3 голосов
/ 03 июля 2011

Если вам нужно специальное решение для этого одноразового случая, может быть проще выбрать визуальный блок с помощью CTRL-v .Это позволит вам выбрать произвольный столбец текста (в вашем случае столбец, содержащий title="(X,Y)"), который затем можно скопировать как обычно, используя y.

3 голосов
/ 03 июля 2011

Это заменит каждую строку списком с разделителями табуляции в каждой строке:

:%s/.* title="(\(\d\+\),\(\d\+\))".*/\1\t\2
0 голосов

вы можете сопоставить все внутри title = () и отбросить все остальное, как это:

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