![](/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.