2009-06-22 7 views
4

私はHTMLファイルを持っています。ファイルにあるすべてのリンクを取得し、Vimを使って別のファイルに保存したいと思います。Regexの結果をVimを使ってファイルに保存

私は正規表現のようなものになるだろうことを知っている:

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

が、私はどこここから行くするかわかりません。

答えて

1

最初の行/列にカーソルを置き、これを試してみてください。

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

「私たち」はここではどういう意味ですか? – allenhwkim

+0

'W' =ファイルの最後の検索をラップしません。 'e'はマッチの最後に移動します。 ':h search()'を参照してください。 –

0

これを試しましたか?

:G/HREF = "\のV([Z-_ /] +)"/W >>

+2

。検索用語が正しく見つかったが、ファイルの内容全体を新しい出力ファイルに出力するだけです。 – Sasha

2

OUTFILEここでの課題は、そうでなければ、ライン上に複数存在し得るすべてのリンクを抽出することですあなたは、単に行うことができると思います:

" 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、:ヘルプ:秒):

あなたが本当により直接的な方法でそれをやってみたかった場合

しかし、あなたはこのような何かを行うことができます

" 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

ジェフ・ミートボールヤンはほとんどなかったです。サーシャとして

はそれだけでマッチした行を記述することOUTFILE

への完全オリジナルのファイルを書き込みwはあなたが使用している場合、あなたが追加する必要が書きました「」 'w'の前に:

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

outfileが存在する必要があります。

+2

ファイルが存在しない場合、またはファイルを作成する場合は、次のようにすることができます。 '.w!' – Tom

2

明らかREG:X

qxq 

検索regex(何でも)とをregに追加:X

:X

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

:tabnew outfile 

プットREG新しいタブを開きます

"xp 

これが動作しない書き込みファイル

:w 
+0

この回答から多くのことを学びました。 qxqを実行してreg xをクリアします。大文字のXを使用すると、レジスタxに一致する行から一致する文字列のみを抽出する方法が追加されます。ありがとうございました!ありがとうございました! – Amjith

関連する問題