Linux

從 curl 輸出中提取 IP:PORT

  • November 11, 2022

我想從 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

引用自:https://unix.stackexchange.com/questions/724447