特定のデータから値を抽出する Webページをブロック

特定のデータから値を抽出する Webページをブロック

目的:カールを使用して、リモートサーバーのdivブロック内に含まれる一連の範囲ブロックから値を抽出します。

ステータスページからいくつかの数字を抽出し、この数字を含むdivブロックを識別する必要があります。

形式は次のとおりです。

<div class="stats-values"><img src="some-image-name.jpg"><span>[numeric]</span> <img src="some-image-name.jpg"><span>[numeric]</span></div>

ソースはすべて1行にあります。この特定のdivブロックは一度だけ表示され、クラス名で簡単に識別できますが、最大6〜7個のスパンブロックを含めることができます。このスパンブロックにはIDやクラスはありません。

画像を飾るには興味がなく、スパンブロック内の数字だけを出力したいと思います。カンマまたはスペースで区切られた数字を出力したいです。

私はそれが次のようになるべきだと想像しています。

curl http://webpage.example.com/status | grep "<div class=\"stats-values\">.*</div>" | grep "<span>.*</span>"

他の検索に出てきたいくつかの例を試してみました。フォーラムですが、今まで結果はありません。

私はgrep、sed、awkなどの構造と構文へのポインタを取得したいと思います。

ベストアンサー1

curl http://webpage.example.com/status             |\
    grep -oP '<div class="stats-values">.*?</div>' |\
    grep -oP '(?<=<span>)\[.*?\](?=</span>)'

まずgrep関連<div ...></div>ブロックを抽出し、
2番目のステップgrepは内部ブロック内のデジタル部分を抽出することです<span>[...]</span>

(?<=pattern)grepPCREは、スイッチで使用するために有効にしたGNUの逆方向拡張です-P
(?=pattern)これから拡張を模索しているPCREです。

これは(?<=<span>)\[.*?\](?=</span>)、私たちのパターンがこれら2つのパターン内に完全に含まれることを意味します[nuerical]。このパターンは出力に含まれず、一致し、見つかった内部パターンのみが返されます。

.*貪欲な一致(可能な限り長い一致)です。.*?貪欲ではありません(できるだけ短い一致)。

おすすめ記事