0

我有很多行的html页面,其中一行是:

var premium_download_link = 'http://www.someurl.com/';

如何在 html 页面中找到该行并从该行中提取http://www.someurl.com

4

5 回答 5

3
echo "var premium_download_link = 'http://www.someurl.com/'" | awk '{print substr ($4,2,23)}'
于 2012-04-09T20:31:03.807 回答
2

您可以通过awk定义字段分隔符变量来提取特定的字段值。

例如,以下应该工作 -

$ echo "var premium_download_link = 'http://www.someurl.com/';" | 
awk -F"'" '{ print $2 }' 
http://www.someurl.com/

但是,您的html文件可能包含其他内容。因此,您可以在脚本前面添加一个正则表达式,以确保它仅在遇到特定行时运行。

例如 -

awk -F"'" '/premium_download_link/{ print $2 }' 
于 2012-04-09T21:07:29.470 回答
2

使用sed

sed -n -e "s/.*var premium_download_link = '\([^']*\)';.*/\1/p"

-n标志禁止打印,除非我们使用p. 因此只打印匹配(然后替换)的行。

编辑(基于 OP 评论):

要在 shell 变量中获取它,您可能需要以下内容:

url=$(wget -qO - "http://originalurl.com/" | sed -n -e "s/.*var premium_download_link = '\([^']*\)';.*/\1/p")

这会获取页面并运行它sed。输出应该是 url,它存储在一个名为url.

于 2012-04-09T20:16:31.570 回答
2

With awk :

awk -F "'" '{ for (f=1; f<=(NF-1)/2; f++) print $(f*2) }' $1

-F "'" define the quote ' as the separator for given input.

于 2012-04-09T20:26:16.243 回答
1
grep -Po "(?<=premium_download_link = ')[^']+"
于 2012-04-09T23:18:25.640 回答