4

我有一个 HTML 文件,我想获取文件中的所有链接并使用 Vim 将其保存到另一个文件中。

我知道正则表达式会是这样的:

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

但我不知道从这里去哪里。

4

5 回答 5

17

Jeff Meatball Yang 快到了。

正如 Sasha 所写,如果您使用 w 它会将完整的原始文件写入输出文件

要只写匹配的行,您必须添加“。” 在'w'之前:

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

请注意,outfile 需要存在。

于 2011-02-02T15:55:33.907 回答
3

清除注册:x

qxq

搜索regex(无论如何)并附加到 reg:x

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

打开一个新标签

:tabnew outfile

把 reg:x

"xp

写文件

:w
于 2011-06-15T13:09:07.863 回答
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/

(参见 :help saveas、:help :vglobal、:help :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 循环的函数中执行此操作,但我将把它留给其他人来编写!

于 2009-06-22T07:18:09.760 回答
1

将光标放在第一行/列并尝试以下操作:

:redir > output.txt|while search('href="', "We")|exe 'normal yi"'|echo @"|endwhile|redir END
于 2009-06-22T22:36:48.560 回答
0

你试过这个吗?

:g/href="\v([a-z_/]+)"/w >> 输出文件

于 2009-06-22T07:10:39.900 回答