从 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,保存到文件并检查文件的值,或者是否有一种更增强的方法来执行wgetRAM 中的某处而不需要存储显式文件?

感谢一百万次,高度赞赏诺伯特

答案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. 下面说明了使用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'

相关内容