簡體   English   中英

我可以只獲取與Grep匹配的字符串部分嗎

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM