Chinaunix

标题: 提取文件中的url [打印本页]

作者: lemoncoral    时间: 2014-06-29 16:18
标题: 提取文件中的url
有一个css文件,里面有包含一些url,比如以下内容:

.button{width:100px;background-url('/static/images/smile.jpg')}

.button:hover {width:100px;color:blue;background-url('/static/images/smile_hover.jpg')}



url的位置不固定,我想把所有的这些url都提取到一个文件中保存,类似:

/static/images/smile.jpg
/static/images/smile_hover.jpg


请教用awk能够实现吗?或者用其他命令能否实现?
作者: MeRcy_PM    时间: 2014-06-29 16:40
  1. grep -Po "(?<=url\(\').*(?=\'\))" urfile
复制代码

作者: lemoncoral    时间: 2014-06-29 16:55
受教了!!

不知道awk  sed完成这项工作,是否有可能?只是想拓展下自己的思路哈
作者: 关阴月飞    时间: 2014-06-29 19:14
回复 1# lemoncoral
  1. awk -F\' '{print $2}' urfile
复制代码

作者: lemoncoral    时间: 2014-06-29 20:24
回复 4# 关阴月飞

精彩!貌似你的这个解法是针对每一行只有一个url地址的情况,如果每一行可能有不止一个,有多个url的情况,该作何解呢:

.button{url(../static/a.jpg)};   .button_a{url(../static/b.jpg)} ........


   
作者: 关阴月飞    时间: 2014-06-29 20:26
回复 5# lemoncoral


    (../static/a.jpg)  url 都是在括号里吗?
作者: lemoncoral    时间: 2014-06-29 20:30
回复 6# 关阴月飞

是的,url都是在括号里面的


   
作者: MeRcy_PM    时间: 2014-06-29 20:32
  1. sed -e "s/^.*('//g;{s/').*//g}" urfile
复制代码
一行一个的这个应该可以
作者: 关阴月飞    时间: 2014-06-29 20:33
回复 7# lemoncoral

试试这个:
  1. awk -F '(' 'NF>1{print $NF}' RS=')' urfile
复制代码

作者: MeRcy_PM    时间: 2014-06-29 20:37
本帖最后由 MeRcy_PM 于 2014-06-29 20:40 编辑

一行多个的,grep的时候在.*后面加个?,用懒惰即可。
  1. grep -Po "(?<=url\(\').*?(?=\'\))" urfile
复制代码

作者: lemoncoral    时间: 2014-06-29 20:44
回复 9# 关阴月飞

感觉用得如鱼得水!谢谢!

另外追问下,在awk中,是否可以做到这样的效果,读入一行,然后进行正则匹配,然后把匹配部分的字符串(比如上面的这个url部分)单独提出来赋给一个变量?
这样就能实现类似grep -o 的效果,如果能很简单地实现就好,如果太复杂或者太曲线,就不如用grep -o。

   
作者: lemoncoral    时间: 2014-06-29 20:45
回复 10# MeRcy_PM

感谢,这个可能就应该是grep的菜!我总在想用awk来实现,也许本身就没对路

   
作者: 关阴月飞    时间: 2014-06-29 20:51
回复 11# lemoncoral

    另外追问下,在awk中,是否可以做到这样的效果,读入一行,然后进行正则匹配,然后把匹配部分的字符串(比如上面的这个url部分)单独提出来赋给一个变量?
这样就能实现类似grep -o 的效果,如果能很简单地实现就好,如果太复杂或者太曲线,就不如用grep -o。


这是可以的,但awk中的正则没grep那么强,有些东东不支持....
作者: LikeLx    时间: 2014-06-30 09:58
  1. sed "s/.*url('\([^']*\).*/\1/"
复制代码

作者: lemoncoral    时间: 2014-06-30 12:52
回复 14# LikeLx

感谢,这是可以的!


   
作者: 用户名注册后不能更改    时间: 2014-06-30 17:44
回复 13# 关阴月飞

awk的正则好像和grep差不多,grep -P以后用的是Perl的正则,这个确实比较强大。
不过Perl的零宽断言必须长度确定,不能(?<=url('?),比较可惜。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2