Linux
從 curl 輸出中提取 IP:PORT
我想從 curl 輸出中獲取列表 ip:port
curl https://www.gametracker.com/search/?sort=5&order=ASC
我無法發布整個輸出,因為它非常大,只發布我們需要提取 IP:PORT 的部分
<a href="/search/?sort=4&order=ASC">Loc</a> </td> <td class="col_h"> <a href="/search/?sort=5&order=DESC">IP:Port</a>▼ </td> <td class="col_h"> <a href="/search/?sort=6&order=ASC">Server Map</a> </td> </tr> <tr> <td> 20. </td> <td> <a href="/search/swat4/"> <img src="/images/game_icons16/swat4.png" alt="SWAT4"/> </a> </td> <td> <a href="/server_info/1.12.237.104:10520/"> tejingduiba FR0.67 TEST </a> </td> <td> 0/16 </td> <td> </td> <td> <a href="/search/_all/CN/"> <img src="/images/flags/cn.gif" alt="" class="item_16x11"/> </a> </td> <td> <span class="ip">1.12.237.104</span><span class="port">:10520</span> </td> <td> Red Library Offices
我只需要提取所有這些值
1.12.237.104:10520
就可以了IP:PORT
如何使用 awk、grep 或任何其他方法來做到這一點?
任務是獲取所有具有屬性和的
span
節點對的值。它們在 HTML 中的節點下成對出現。class``ip``port``td
第一個問題是輸出
curl
不是乾淨的 XML。這可以通過使用以下方法將 HTML 重新轉換為 XML 來解決xmlstarlet
:curl --silent 'URL' | xmlstarlet format --html
使用 XML 格式的文件,我們現在可以找到
td
我們感興趣的所有節點。這些節點具有一個屬性為td
的子節點(我們假設還有另一個屬性為 的兄弟節點)。對於每個這樣的節點,我們連接節點的子節點的值。span``class``ip``span``class``port``td``span
curl --silent 'URL' | xmlstarlet format --html | xmlstarlet select --template \ --match '//_:td[_:span[@class="ip"]]' \ --value-of 'concat(_:span[@class="ip"], _:span[@class="port"])' -nl
每個節點名稱之前的時髦外觀
_:
是由於使用預設命名空間的文件。給定遊戲伺服器的目前狀態,輸出
1.12.237.104:10520 1.14.139.78:14567 1.15.235.182:27102 1.117.83.171:27025 1.117.83.171:27026 2.56.96.145:27960 2.56.99.56:9987 2.56.213.77:27015 2.204.29.39:27015 2.204.29.39:27016 3.0.10.0:28960 3.0.242.157:28960 3.6.230.224:27015 3.17.155.136:19274 3.28.115.189:27015