![](/img/trans.png)
[英]How can I grab the only part of a string that matches a regular expression?
[英]Can I get only the part of the string that matches with Grep
我有一些HTML,我想从使用grep提取URL。 有没有一种优雅的方法可以做到这一点? 到目前为止,我正在使用wget将html转储到tmp.html文件中。 然后,这就是我正在做的:
awk '/<a href=/,/<\/a\>/' tmp.html | grep -v "sha1|md5" |grep -E "*.rpm?" | tail -1
给定以下字符串类型的列表,我只想提取列表上的最后一个.rpm URL。
<td><a href="http://maven-whatever:8081/nexus/content/repositories/snapshots/com/whatever/whatever/adv-svcs/something/0.0.1-SNAPSHOT/something-0.0.1-20150227.161014-81-sles11_64.rpm">something-0.0.1-20150227.161014-81-sles11_64.rpm</a></td>
为第三个arg使用GNU awk match()并给出以下输入文件:
$ cat file
<td><a href="http://maven-whatever:8081/nexus/content/repositories/snapshots/com/whatever/whatever/adv-svcs/something/0.0.1-SNAPSHOT/something-0.0.1-20150227.161014-81-sles11_64.rpm">something-0.0.1-20150227.161014-81-sles11_64.rpm</a></td>
这可能是您想要的:
$ cat tst.awk
match($0,/<a href=.*>(.*\.rpm)<\/a\>/,a) && !/sha1|md5/ {url=a[1]} END{print url}
$ gawk -f tst.awk file
something-0.0.1-20150227.161014-81-sles11_64.rpm
或这个:
$ cat tst.awk
match($0,/<a href="([^"]+\.rpm)".*<\/a\>/,a) && !/sha1|md5/ {url=a[1]} END{print url}
$ gawk -f tst.awk file
http://maven-whatever:8081/nexus/content/repositories/snapshots/com/whatever/whatever/adv-svcs/something/0.0.1-SNAPSHOT/something-0.0.1-20150227.161014-81-sles11_64.rpm
但没有更多示例输入和预期输出,这只是一个猜测。
-o
选项使grep仅输出匹配项,而不打印匹配的完整行。 如果一行中有多个匹配项,则将全部打印。
*.rpm?
不是正则表达式。 如果您想使比赛有意义,则需要非常精确。 可能像
grep -o '"[^"]*.rpm"'
会给你更多的还是少了什么,你正在寻找(但它将输出报价为好,且不会涉及%
的URL -escapes。
使用awk
可能会做得更好,因为无论如何都在使用它。
用正则表达式解析HTML永远不会像使用真正的HTML解析器那样健壮或容易,就像在这里经常观察到的那样 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.