提取url部分行

时间:2012-04-09 20:10:34

标签: regex bash sed awk

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

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

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

5 个答案:

答案 0 :(得分:3)

echo "var premium_download_link = 'http://www.someurl.com/'" | awk '{print substr ($4,2,23)}'

答案 1 :(得分: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的变量中。

答案 2 :(得分:2)

使用awk:

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

-F "'"将引用'定义为给定输入的分隔符。

答案 3 :(得分: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 }' 

答案 4 :(得分:1)

grep -Po "(?<=premium_download_link = ')[^']+"
相关问题