我想知道是否有办法下载(wget
可能)一个 html 文件http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html
这里是pastebin 中的 html 文件。不过,这是重要的东西。
<script type='text/javascript'> jwplayer("flvplayer").setup({
file: "http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4",
skin: "beelden",
image: "http://77.81.98.228:8777/i/03/00494/wrdlm4dbigu4.jpg",
我需要http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4
从该 html 文件中提取。
file:
因此和之间的文本",
我是 ubuntu 和终端界面的新手,所以我不熟悉基本的命令行代码。
答案1
首先,必须发出警告。通常非常糟糕的主意尝试使用正则表达式等简单工具来解析 HTML。也就是说,在这种情况下,如果您确定所需的内容始终位于 和 之间file:
,,
则可以使用:
wget -O - http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html 2>/dev/null |
grep -oP 'file:\K[^,]*'
您需要 来-O -
告诉wget
它把 html 打印到标准输出而不是保存到文件中。然后通过grep
Perl 兼容正则表达式 ( -P
) 将其传递,并-o
告诉它只打印行的匹配部分。正则表达式本身会查找file:
并丢弃它 ( \K
),然后查找 0 个或多个非,
字符 ( [^,]*
)。2>/dev/null
丢弃 wget 的消息。
请注意,在您提供的示例 URL 中,有三个匹配项:
$ wget -O - http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html | grep -oP 'file:\K[^,]*'
"http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebwqbtaozwssfetq/v.mp4"
"http://vodlocker.com/dl?op=get_slides&file_code=wrdlm4dbigu4"
"http://vodlocker.com/images/vodjw_logo.png"
如果您知道只需要第一个,则在第一个匹配后使用-m 1
它来停止:grep
$ wget -O - http://vodlocker.com/embed-wrdlm4dbigu4-850x450.html 2>/dev/null |
grep -m1 -oP 'file:\K[^,]*'
"http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebwqbtaozyasfetq/v.mp4"
答案2
grep
与 PCRE 一起使用( -P
):
grep -Po 'file:\s"\K[^"]+\.mp4(?=",)' file.txt
使用sed
:
sed -nr 's/.*file: "([^"]+\.mp4)",/\1/p' file.txt
file "
两者都在和之间找到所需的字符串",
,而且我们需要.mp4
在之前进行匹配",
,以便其他不需要的字符串不会出现在输出中。
例子:
% wget -q -O- http://pastebin.com/raw/eQFTp0cy | grep -Po 'file:\s"\K[^"]+\.mp4(?=",)'
http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4
% wget -q -O- http://pastebin.com/raw/eQFTp0cy | sed -nr 's/.*file: "([^"]+\.mp4)",/\1/p'
http://77.81.98.228:8777/n2ceexa2lo4pcnokaldsf4o64qg7le7rp2xxamcxtdebx4vta3lae5iz6e/v.mp4