内部に値を持つ非常に単純な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のどこかに実行し、明示的な保存するファイル?
100万回ありがとう、高く評価されているNorbert
次の方法で、grep
を使用して例の値を抽出し、変数に割り当てることができます
_$ x=$(wget -0 - 'http://foo/bar.html' | grep -Po '<value.*strValue="\K[[:digit:]]*')
$ echo $x
57
_
説明:
$()
:コマンド置換grep -P
_:Perl正規表現を有効にしたgrepgrep -o
_:grepは行の一致したpartのみを表示します\K
_:この時点までに何が一致したかを出力に表示しませんwget -O -
_:ダウンロードしたドキュメントを標準出力(ファイルではなく)に出力しますただし、一般的なアプローチでは、HTMLコードに専用のパーサーを使用することをお勧めします。
wget
について何を話しているのかはわかりませんが、ファイルをダウンロードする必要があると思います。もしそうなら、はい、あなたはそれをダウンロードして、中間の一時ファイルなしでそれを解析することができます:
$ value=$(wget -O - http://example.com/file.html | grep -oP 'strValue="\K[^"]+')
$ echo $value
57
wget -O - ...
テクニックとは別に、curl -Ss ...
を使用して一時ファイルの煩わしさを回避することもできます。
以下は、CSSベースのクエリ言語をサポートするpup
( https://github.com/ericchiang/pup )の使用法を示しています。
a)<value>
タグの「テキスト」値を抽出するには:
pup 'value text{}' # yields 572
b)<value>
タグのstrValue属性の値を抽出するには:
pup 'value attr{strvalue}' # yields 57