Shell-Script
如何使用 grep 和 cut in 腳本從 HTML 文件中獲取網站 URL
我正在嘗試使用 grep 和 cut 從 HTML 文件中提取 URL。連結如下所示:
<a href="http://examplewebsite.com/">
其他網站有
.net
,.gov
但我想我可以在此之前做出分界點>
。所以我知道我可以使用 grep 和 cut 以某種方式切斷 http 之前和 .com 之後的所有內容,但我已經堅持了一段時間。
正如我在評論中所說,使用正則表達式解析 HTML 通常不是一個好主意,但如果您正在解析的 HTML 表現良好,您有時可以僥倖逃脫。
為了只獲取元素
href
屬性中的URL<a>
,我發現在多個階段中最容易做到這一點。從您的評論來看,您似乎只想要頂級域,而不是完整的 URL。在這種情況下,您可以使用以下內容:grep -Eoi '<a [^>]+>' source.html | grep -Eo 'href="[^\"]+"' | grep -Eo '(http|https)://[^/"]+'
source.html
包含要解析的 HTML 程式碼的文件在哪裡。此程式碼將列印作為每行中任何元素的
href
屬性出現的所有頂級 URL 。<a>
第一個命令的-i
選項grep
是確保它對<a>
和<A>
元素都有效。我想你也可以給-i
第二個grep
來擷取大寫HREF
屬性,OTOH,我寧願忽略這種破碎的 HTML。:)處理內容
http://google.com/
wget -qO- http://google.com/ | grep -Eoi '<a [^>]+>' | grep -Eo 'href="[^\"]+"' | grep -Eo '(http|https)://[^/"]+'
輸出
http://www.google.com.au http://maps.google.com.au https://play.google.com http://www.youtube.com http://news.google.com.au https://mail.google.com https://drive.google.com http://www.google.com.au http://www.google.com.au https://accounts.google.com http://www.google.com.au https://www.google.com https://plus.google.com http://www.google.com.au
當我被重定向到澳大利亞 Google 頁面時,我的輸出與其他範例略有不同。
不確定您是否受限於工具:
但是正則表達式可能不是如上所述的最佳方式,但這是我放在一起的一個例子:
cat urls.html | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | sort -u
grep -E
: 和 egrep 一樣grep -o
: 只輸出已經被 grepped 的內容(http|https)
: 是一個/或a-z
: 都是小寫A-Z
: 都是大寫.
: 是點/
: 是斜線?
: 是 ?=
: 是等號_
: 是下劃線%
: 是百分號:
: 是冒號-
: 是破折號*
: 是重複$$ … $$團體sort -u
:將排序並刪除任何重複項輸出:
bob@bob-NE722:~s$ wget -qO- https://stackoverflow.com/ | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*" | sort -u https://stackauth.com https://meta.stackoverflow.com https://cdn.sstatic.net/Img/svg-icons https://stackoverflow.com https://www.stackoverflowbusiness.com/talent https://www.stackoverflowbusiness.com/advertising https://stackoverflow.com/users/login?ssrc=head https://stackoverflow.com/users/signup?ssrc=head https://stackoverflow.com https://stackoverflow.com/help https://chat.stackoverflow.com https://meta.stackoverflow.com ...
您還可以添加
\d
以擷取其他數字類型。