カール出力からIP:PORT抽出

カール出力からIP:PORT抽出

カール出力からリストip:portを取得したいと思います。

curl https://www.gametracker.com/search/?sort=5&order=ASC

容量が大きすぎて出力全体を公開できません。 IP:PORTを抽出する必要がある部分だけを公開できます。

                                <a href="/search/?sort=4&amp;order=ASC">Loc</a>
                        </td>
                        <td class="col_h">
                                <a href="/search/?sort=5&amp;order=DESC">IP:Port</a>▼
                        </td>
                        <td class="col_h">
                                <a href="/search/?sort=6&amp;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、または他の方法を使用してこれを行うにはどうすればよいですか?

ベストアンサー1

タスクは、sum属性を持つすべてのノードペアの値を取得することですspan。 HTMLのノードの下にペアで表示されます。classipporttd

最初の問題は、出力がcurlきれいなXMLではないことです。この問題は、次のようにHTMLをXMLに変換することで解決できますxmlstarlet

curl --silent 'URL' | xmlstarlet format --html

これで、XML文書を使用してtd関心のあるすべてのノードを見つけることができます。これらのノードには属性を持つ子tdノードがありますspan(属性を持つ他の兄弟ノードがあるとします)。これらの各ノードについて、ノードの子値を連結します。classipspanclassporttdspan

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

おすすめ記事