在终端中提取文本字符串

在终端中提取文本字符串

我想知道是否有办法下载(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 打印到标准输出而不是保存到文件中。然后通过grepPerl 兼容正则表达式 ( -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

相关内容