2013-07-22 2 views
0

Я хотел бы извлечь данные из документа с помощью VIM с использованием регулярного выражения, но мне нужно только точное совпадение, а не отверстие. В основном просто скопируйте то, что:% s заменит.VIM regexp копировать точное соответствие

Простой пример:

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

... и извлечь номера:

8092.23 
850.00 
99.99 

возможно ли это в VIM, и если как? Спасибо заранее.

+0

Хочет линию заменить? хотите ли вы напечатать цифры на экране? – FDinoff

+0

Мне все равно, если они заменяются или просто в реестре, я просто нуждаюсь в них в этом формате где-то. Однако замена их будет моим предпочтительным методом. – Tharre

ответ

1

попробовать это:

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

А это именно то, что я искал. Большое спасибо! – Tharre

1

Используйте регулярное выражение с привязками к началу и концу строки, делайте группировку, чтобы сохранить числа и заменить всю строку на нее. Выполните следующую команду из командной строки, и он создаст новый файл output.txt с номерами оставляя входной файл немодифицированный:

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

Это работает, однако для такой простой задачи, похоже, очень много усилий. – Tharre

+1

@Tharre просто возьмите '% s/\ v^\ D + (\ d + \. \ D *). * $/\ 1 /' part – FDinoff

+0

@Tharre: ** FDinoff ** прав. Вы можете избавиться от команды 'set backup', потому что исходный файл не изменяется. И вся команда создает новый файл с нужным вами контентом. Для этой задачи не слишком много кода. Но изнутри 'vim' просто делать то, что ** FDinoff ** говорит. – Birei

Смежные вопросы