2012-09-07 155 views
3

我想刪除一切,直到csv文件中每行的第一個逗號。 線條是這樣的:Vim非貪婪搜索

-29.45829963684082~149.14680480957031,-000029.45829963684082, 000149.14680480957031,WGS84 
-29.46190071105957~149.09509277343750,-000029.46190071105957, 000149.09509277343750,WGS84 

當我執行%s/.*,\\{-}//它消除了一切!

如果我使用%s/.*,//它將刪除除WGS84之外的所有內容,這是我所期望的。

誰能告訴我我做錯了什麼?我認爲\{-}在Vim中實施了非貪婪匹配。

感謝,

約翰

回答

3

我只想用[^,]*代替.*。這會讓你的正則表達式對逗號不太貪婪。

就你爲什麼你的變體不能正常工作而言,你似乎在你的正則表達式中有錯誤的方法。 {-}應該相當於*但非貪心,你已經已經使用*儘可能地吸盡。那裏你也有太多的反斜槓。試試:

:%s/.\{-},// 

改爲。

當我這樣做,你的測試輸入,我得到:

-000029.45829963684082, 000149.14680480957031,WGS84 
-000029.46190071105957, 000149.09509277343750,WGS84 

預期。

1

這裏就是你需要做的

%s/[^,]*// 
3

\{-}什麼是Vim的非貪婪匹配的,所以你應該使用\{-}而不是*

嘗試:

%s/.\{-},// 
2

另一條路線採取是使用全局命令。

:g//normal dt, 
+3

或者只是':%norm dt,' – Conner

+0

@Conner哦哇。我從來沒有意識到:)我從現在起就這麼用了! – sehe

+0

@sehe檢查[this](http://www.reddit.com/r/vimgolf/comments/wmtep/abusing_macros_part_1_normal/)。 :-) – Conner