目的: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