我有一个非常简单的 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'