2009-06-22 57 views

回答

1

將光標放在第一行/列,試試這個:

:redir > output.txt|while search('href="', "We")|exe 'normal yi"'|echo @"|endwhile|redir END
+0

「我們」在這裏意味着什麼? – allenhwkim 2011-03-01 16:12:57

+0

`W` =不包裝文件末尾的搜索。 `e` =移動到比賽結束。參見`:h search()`。 – 2011-03-01 20:13:20

0

你試過嗎?

:克/ HREF = 「\ V([A-Z _ /] +)」,否則/ W >> OUTFILE

+2

這是行不通的。它會導致搜索詞被正確找到,但它只是將文件的全部內容輸出到新的outfile中。 – Sasha 2009-06-23 05:45:57

2

這裏的挑戰在於提取所有的鏈接,其中可能有多個上線,你可以簡單地做:

" Extract all lines with href= 
:g/href="[^"]\+"/w >> list_of_links.txt 
" Open the new file 
:e list_of_links.txt 
" Extract the bit inside the quotation marks 
:%s/.*href="\([^"]\+\)".*/\1/ 

最簡單的方法很可能會做到這一點:

" Save as a new file name 
:saveas list_of_links.txt 
" Get rid of any lines without href= 
:g!/href="\([^"]\+\)"/d 
" Break up the lines wherever there is a 'href=' 
:%s/href=/\rhref=/g 
" Tidy up by removing everything but the bit we want 
:%s/^.*href="\([^"]\+\)".*$/\1/ 

或者(以下類似的主題),

:g/href="[^"]\+"/w >> list_of_links.txt 
:e list_of_links.txt 
:%s/href=/\rhref=/g 
:%s/^.*href="\([^"]\+\)".&$/\1/ 

(見:幫助另存爲,:求助:vglobal,:求助:S)

但是,如果你真的想要做一個更直接的方式,你可以做這樣的事情:

" Initialise register 'h' 
:let @h = "" 
" For each line containing href=..., get the line, and carry out a global search 
" and replace that extracts just the URLs and a double quote (as a delimiter) 
:g/href="[^"]\+"/let @h .= substitute(getline('.'), '.\{-}href="\([^"]\+\)".\{-}\ze\(href=\|$\)', '\1"', 'g') 
" Create a new file 
:new 
" Paste the contents of register h (entered in normal mode) 
"hp 
" Replace all double quotes with new-lines 
:s/"/\r/g 
" Save 
:w 

最後,你可以用一個for循環的函數來完成它,但我會留給別人來寫!

10

傑夫肉丸楊是幾乎沒有。

至於薩沙,如果你使用它W¯¯完整的原始文件寫入到outfile中

要只寫匹配的行,你必須添加寫道「」 'w'前:

:g/href="\v([a-z_/]+)"/ .w >> outfile 

請注意outfile需要存在。

+2

如果文件不存在,或者你想創建文件,你可以這樣做:`.w!` – Tom 2015-04-29 21:05:46

2

明確REG:X

qxq 

搜索regex(無論)和追加到章:X

:g/regex/call setreg('X', matchstr(getline('.'), 'regex') . "\n") 

打開一個新標籤

:tabnew outfile 

放REG:X

"xp 

寫文件

:w