我想創建一個BASH腳本,它將從HTML表中提取數據。 下面是桌子的距離,我需要提取數據的例子:如何從shell腳本中的html表中提取數據?
<table border=1>
<tr>
<td><b>Component</b></td>
<td><b>Status</b></td>
<td><b>Time/Error</b></td>
</tr>
<tr><td>SAVE_DOCUMENT</td><td>OK</td><td>0.406 s</td></tr>
<tr><td>GET_DOCUMENT</td><td>OK</td><td>0.332 s</td></tr>
<tr><td>DVK_SEND</td><td>OK</td><td>0.001 s</td></tr>
<tr><td>DVK_RECEIVE</td><td>OK</td><td>0.001 s</td></tr>
<tr><td>GET_USER_INFO</td><td>OK</td><td>0.143 s</td></tr>
<tr><td>NOTIFICATIONS</td><td>OK</td><td>0.001 s</td></tr>
<tr><td>ERROR_LOG</td><td>OK</td><td>0.001 s</td></tr>
<tr><td>SUMMARY_STATUS</td><td>OK</td><td>0.888 s</td></tr>
</table>
我想bash腳本輸出它像這樣:
SAVE_DOCUMENT OK 0.475 s
GET_DOCUMENT OK 0.345 s
DVK_SEND OK 0.002 s
DVK_RECEIVE OK 0.001 s
GET_USER_INFO OK 4.465 s
NOTIFICATIONS OK 0.001 s
ERROR_LOG OK 0.002 s
SUMMARY_STATUS OK 5.294 s
怎麼辦呢?
到目前爲止,我已經使用SED試過,但我不知道如何使用它相當不錯。我使用grep "<tr><td>
排除了使用grep排除的表頭(組件,狀態,時間/錯誤),因此只有以<tr><td>
開頭的行纔會被選中用於下一個解析(sed)。 這是我使用的:sed '[email protected]<\([^<>][^<>]*\)>\([^<>]*\)</\1>@\[email protected]'
但後來<tr>
標籤仍然存在,也是它不會分開的字符串。換句話說這個腳本的結果是:
<tr>SAVE_DOCUMENTOK0.406 s</tr>
我工作的腳本的完整命令是:
cat $FILENAME | grep "<tr><td>" | sed '[email protected]<\([^<>][^<>]*\)>\([^<>]*\)</\1>@\[email protected]'
它是否必須是bash腳本?如果你在Linux上,也許一個Perl腳本將是一個更簡單的選擇。然後,您可以使用[HTML :: Parser](http://search.cpan.org/~gaas/HTML-Parser-3.68/Parser.pm)模塊或類似模塊。 – Mike
必須是bash :) – Marko