2013-07-22 49 views
0

我想用VIM使用正則表達式從文檔中提取數據,但我只需要精確匹配而不是空行。基本上只是複製:%s會取代。VIM正則表達式複製完全匹配

簡單的例子:

<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

使用帶錨的正則表達式來定義行的開頭和結尾,進行分組以保留數字並用它替換整行。從shell中運行以下命令,它會創建一個新的文件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 /'部分 – FDinoff

+0

@Tharre:** FDinoff **是對的。你可以擺脫'set backup'指令,因爲原始文件沒有被修改。整個命令將創建一個包含所需內容的新文件。它似乎沒有太多的代碼,該任務。但是從'vim'裏面,只要做** FDinoff **說的。 – Birei