値を含む非常に単純な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
wget -O - ...
この手法に加えて、一時curl -Ss ...
ファイルを使用して問題を回避することもできます。次は
pup
(https://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'