sedを使用してhtmlタグから値を抽出したいと思います。

sedを使用してhtmlタグから値を抽出したいと思います。

sedを使用してhtmlタグから値を抽出したいと思います。

文書:

<td class=xl7128074></td>
  <td class=xl7128074></td>
  <td class=xl7128074></td>
 </tr>
 <tr height=21 style='height:15.75pt'>
  <td height=21 class=xl8428074 style='height:15.75pt;border-top:none'>ANT</td>
  <td class=xl10028074 style='border-top:none;border-left:none'>$interoprfbcheck_prodconnectorstatus_ANT</td>
  <td class=xl8228074>ANT</td>

  <!-- This is set by Python -->
  <td class=xl155577 style='border-left:none;font-size:11.0pt;color:#006100;          
  font-weight:400;text-decoration:none;text-underline-style:none;text-line-through:       
  none;font-family:Arial;border-top:none;border-right:1.0pt solid windowtext;             
  border-bottom:1.0pt solid windowtext;border-left:1.0pt solid windowtext;
  background:#E6EFCE;mso-pattern:black none'>
GREEN</td>
  <td class=xl7128074></td>
  <td class=xl7128074></td>
  <td class=xl7128074></td>

期待される結果が欲しい

ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
GREEN

私はsed -n 's/<td.*>\(.*\)<\/td>/\1/p' filename.html 次のような結果を使用して取得しています:

ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT

GEEENは来ません。同じ行にないので、次の行の結果を得るために追加できるものはありますか?

答え1

html2これをsedの「プリプロセッサ」として使用できます。

$ html2 <file 2>/dev/null | sed '/td=/!d;s/^.*td=//'
ANT
$interoprfbcheck_prodconnectorstatus_ANT
ANT
 GREEN

答え2

GREENsedジェネレータが別の行に配置されているため、スクリプトが一致するものが見つからないため表示されません。着信ストリームは、特別な準備なしにsed1行ずつ一致するスペースに引き込まれます。

Nしたがって、コマンドを使用して一致スペースが閉じられるまで、新しい行を一致スペースにドラッグし、予約済みスペースにパターンスペースのコピーを保存し、先行</tr>タグ<tr ...>を削除し、</tr>一致スペースの先頭から最後まですべてを削除する必要があります。印刷してください。

その後、一致するスペースをスペースを保存することに置き換えて、印刷された部分を削除してから先行<tr ...>タグを再検索する必要があります。

info sed詳細については、次を参照してください。

答え3

公開したHTMLの例は、さまざまな理由で有効なXMLではありません。ただし、問題が解決したら、次のコマンドを使用できます。

xmlstarlet sel -t -v '//td[text()]' input.html

空でない最後のテキストが代わりにtdあるため、結果は正確に予想されたものとは異なります。GREEN\nGREEN

関連情報