从 HTML 中提取值的简单方法

njo*_*dan 2 command-line grep text-processing regular-expression 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>
Run Code Online (Sandbox Code Playgroud)

提取和写入变量的简单 bash 脚本方法是什么?有没有办法甚至不需要将 wget 放入文件作为中间步骤,这样就不需要打开和使用存储文件的文件,而是直接使用 wget?

澄清一下,我可以做一个简单的wget,保存到文件并检查文件的值,或者是否有更增强的方法来执行wgetRAM 中的某处而不需要存储显式文件?

感谢一百万次,非常感谢诺伯特

jim*_*mij 10

您可以grep使用以下方式提取示例中的值并将其分配给变量

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

解释:

  • $(): 命令替换
  • grep -P: 启用 Perl 正则表达式的 grep
  • grep -o: grep 只显示该行的匹配部分
  • \K:不要在输出中显示到目前为止匹配的任何内容
  • wget -O -: 将下载的文档打印到标准输出(而不是文件)

但是,对于一般方法,最好对 html 代码使用专用解析器。


ter*_*don 5

我不知道wget你在说什么,但我猜你想下载该文件。如果是这样,是的,您可以下载它并解析它,无需中间临时文件:

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