HTMLから値を抽出する簡単な方法

HTMLから値を抽出する簡単な方法

値を含む非常に単純なHTMLファイルがあります。この場合、値は57です。

<eta version="1.0"><value uri="/user/var/48/10391/0/0/12528" strValue="57" unit="%" decPlaces="0" scaleFactor="10" advTextOffset="0">572</value></eta>

変数を抽出して作成する簡単なbashスクリプト方法は何ですか?途中でファイルにwgetを要求せずにファイルが保存されているファイルを開き、使用することなくwgetを直接使用する方法はありますか?

wget明確にすると、ファイルに保存してファイル値を確認する簡単な作業を実行できますか?それともwget明示的なファイルを保存せずにRAMのどこかで実行できるより改善された方法はありますか?

百万回も感謝し、ノーベルトに深く感謝します。

答え1

grep例から値を抽出して変数に割り当てることができます。

$ x=$(wget -0 - 'http://foo/bar.html' | grep -Po '<value.*strValue="\K[[:digit:]]*')
$ echo $x
57

説明する:

  • $(): コマンドの置換
  • grep -P: grep と Perl 正規表現の有効化
  • grep -o:grepは一致するもののみを表示します。部分善意
  • \K:これまでの一致は出力に表示されません。
  • wget -O -:ダウンロードした文書を標準出力(ファイルではなく)として印刷します。

しかし、一般的なアプローチでは、専用のHTMLコードパーサーを使用することをお勧めします。

答え2

wget何を言っているのかわかりませんが、ファイルをダウンロードしたいと思います。その場合は、中間の一時ファイルなしでダウンロードして解析できます。

$ value=$(wget -O - http://example.com/file.html | grep -oP 'strValue="\K[^"]+')
$ echo $value
57

答え3

  1. wget -O - ...この手法に加えて、一時curl -Ss ...ファイルを使用して問題を回避することもできます。

  2. 次はpuphttps://github.com/ericchiang/pup)はCSSベースのクエリ言語をサポートしています。

a) ラベルの「テキスト」値を抽出します<value>

pup 'value text{}'  # yields 572

b)ラベルのstrValue属性値を抽出します<value>

pup 'value attr{strvalue}' # yields 57

答え4

cat input | grep -o strValue=".*" | sed 's/strValue=//g' | sed 's/"//g'

関連情報