0

sample.html別のテーブル列に基づいて、html ファイルを読み取り、テーブル列からデータを抽出するシェル スクリプトを作成する必要があります。たとえば、これは HTML コードです。

<table style="BORDER-COLLAPSE: collapse"
  border="0" bordercolor="#000000"
  cellpadding="3" cellspacing="0" width="100%" height="200">
  <tr >
    <td class="fontStyleOne" width="30%">
      <div align="left">
      core6690.myserverdomain.com </div>
    </td>
    <td  class="tdfontTwo" width="30%">
      <div class="label-styler" align="left">
      admin</div>
    </td>
  </tr>
  <tr >
    <td class="fontStyleOne" width="30%">
      <div align="left">
      core6691.myserverdomain.com </div>
    </td>
    <td  class="tdfontTwo" width="30%">
      <div class="label-styler" align="left">
      secondary </div>
    </td>
  </tr>
  <tr >
    <td  class="fontStyleOne" width="30%">
      <div align="left">
      core6692.myserverdomain.com </div>
    </td>
    <td  class="tdfontTwo" width="30%">
      <div class="label-styler" align="left">
      primary </div>
    </td>
  </tr>
</table>

「admin」の URL を特定したい場合、結果は core6690.myserverdomain.com になります。入力が「プライマリ」の場合、出力は「core6692.myserverdomain.com」などになります...

HTMLページにはさらに多くのデータ、ヘッダータグ、フッターなどがありますが、探している重要なものは、コードにリストしたのとまったく同じ構造のテーブル内に配置されています...もっと多くのものがあることを除いてこの例のように 3 行だけである必要はありません。

このサイトで、seg、grep、正規表現、awk、およびその他のツールに関する関連する回答を見てきましたが、探しているものに十分近いものはありません...さらに、どのアプローチについてもあまり経験がありません。それらを変更して私のニーズに合わせます。

助言がありますか?前もって感謝します。

4

2 に答える 2

4

他のツールの使用が許可されている場合、私のXidelはそれを行うことができます。

xpath を使用:

xidel /tmp/f.html -e "//tr[td[2] = 'admin']/td[1]"

またはパターンマッチング:

xidel /tmp/f.html -e "<tr><td>{.}</td><td>admin</td></tr>

少なくとも、投稿した抜粋ではそれが行われますが、より大きなファイルの場合は、他に何があるかによって異なります。

于 2012-10-31T23:27:34.523 に答える
1
#/bin/bash

for i in `cat sample.html | grep '<\/div>' | sed 's/\s\+//'|sed 's/<.*>//'`; do
    if [ $i == $1 ];
    then
        echo $prev
    fi
    prev=$i
done

使用例

$ ./filter.sh primary
core6692.myserverdomain.com

Ps: sample.html の形式は、ここに投稿したとおりである必要があります。サーバーと名前は、タグで終わり、空白またはタブで始まる必要があります。

于 2012-10-31T23:55:09.593 に答える