2013-10-06 75 views
0

我有一個操作列表,操作階段和URL。這份名單看起來是這樣的:搜索跨區域不連續區域

14257 0 : http://google.com/ 
14259 0 : http://www.microsoft.com/ 
14259 1 
14259 2 
14261 0 : http://www.apple.com/ 
14261 1 
14261 2 
14262 0 : http://stackoverflow.com/ 
14262 1 
14263 0 : http://dotancohen.com/ 
14263 1 
14263 2 

注意操作1425714262沒有得到階段性2,而其他人沒有。

請考慮文件已經運行通過sort。現在我怎麼能減少文件到只有線沒有得到階段2?因此,最終的文件看起來像這樣:

14257 0 : http://google.com/ 
14262 0 : http://stackoverflow.com/ 

回答

2

所以基本上,你想刪除所有的行,在接下來的2行繼續。 我想,這一個做的:

g/\v^%(<(\d+)>\D.*\n)%(\1.*\n)%(\1 2)/d 3 

然後事後做一v/^\v\d+\D\d\D:/d,你只剩下:

14257 0 : http://google.com/ 
14262 0 : http://stackoverflow.com/ 
+0

謝謝。你能解釋':g /'行嗎?即使只是鏈接到罰款手冊將是偉大的。我想了解'%'的含義,以及爲什麼以'\ v'開頭。謝謝! – dotancohen

+1

'\ v'意思是「非常神奇」的模式,它允許使用通常的正則表達式量詞而不會轉義它們,這意味着您可以跳過一大堆反斜槓。 '%('是一種對模式進行分組的方法,通常它比正常的'('分組快,因爲它不捕獲模式,你可以在':h/\%v'和':h/\%(' –

+0

謝謝! – dotancohen

1

你可以做與數字,一些空白和數量2開頭的行搜索。對於每一場比賽,刪除該線和上面的兩條線。只有線路與數字01將離開之後,所以用一個全局搜索和刪除不包含冒號每一行:

function! DeleteNonContinuous() 
    while search('^\v\d+\s+2', 'W') != 0 
     execute "normal 2kdelete" 
    endwhile 
    %v/:/delete 
endfunction 

command! DNC :call DeleteNonContinuous() 

這樣使用它:

:DNC 

國債收益率:

14257 0 : http://google.com/ 
14262 0 : http://stackoverflow.com/