HTMLテーブルからデータを抽出する

HTMLテーブルからデータを抽出する

目的:1) リターン名前2 <a>)複数のHTMLテーブル行のセル値を評価し、条件付きで0または1を返します。

これにより、curl -s http://[server-fqdn]/stats/servers?t=db | grep 'tr class="server"コードスニペットに示すように、異なる数の行が返されます。この例では、データベース・サーバーをリストします。

ライン彫刻(注:行全体の文字数は2,000〜2,150文字です。)

<tr class="server"><td class=val><a name="srv_backend_3306/server"></a></td> [cut away] <td class=val>1d3h UP</td>

挑戦:価値抽出名前最初のタグ<a>の内容を評価します<td class=val></td>(単語UPが含まれている場合は0を返し、それ以外の場合は1を返します)。

上記のカールコマンドを拡張、追加、インポート| cut -d\> -f3 | cut -d\" -f2できます。名前- しかし、どのように異なる結果を得ることができますか?セルには一意の識別子がなく、cutテーブル作成の動的性質のために使用しても正確に縮小されません。

ベストアンサー1

ここで少し破片それからインスピレーションを得ましたStackOverflow 回答これをネイティブbashで使用できます。入力を読み取った後、他の関数を使用して解析する関数があります。ドームコンテンツ:

#!/bin/bash
cr=1
ac=""
read_dom () {
    local IFS=\>
    read -d \< ENTITY CONTENT
    local ret=$?
    TAG_NAME=${ENTITY%% *}
    ATTRIBUTES=${ENTITY#* }
    return $ret
}

parse_dom () {
    
    if [[ $TAG_NAME == "a" ]] ; then
    eval local $ATTRIBUTES
        ac=`cut -d "=" -f2  <<< "$ATTRIBUTES" | tr -d '"'`
    fi 
    if [[ $TAG_NAME == "td" && "$(cut -d= -f1 <<< $ATTRIBUTES)" == "class" && $CONTENT == *"UP"*  ]] ; then
        cr=0 
    fi
}

while read_dom; do
    parse_dom
done  <<< "$(curl -s http://[server-fqdn]/stats/servers?t=db | grep 'tr class="server")"
echo "<a> tag content : $ac"
echo "return value for <td> check : $cr"

出力:

<a> tag content : srv_backend_3306/server
return value for <td> check : 0

おすすめ記事