【问题标题】:How to use grep to find value of html tag如何使用 grep 查找 html 标签的值
【发布时间】:2023-03-26 06:46:02
【问题描述】:

我想分析我网页的某些方面。例如,我想查看所有 alt 标签的值。对于示例,我创建了包含少量 alt 标记的简单 html 代码。假设代码中的标签是:

alt='Text-01'
alt='Text 02'
alt=''
alt='Some long text'

然后我尝试了命令:

grep -o "alt='*'" my-page.html

输出是:

alt='
alt='
alt=''
alt='

我希望看到像这样的输出:

Text-01
Text 02
empty line or alt=''
Some long text

或者这个:

alt='Text-01'
alt='Text 02'
alt=''
alt='Some long text'

你能帮我实现吗?

【问题讨论】:

  • 试试:grep -o "alt='.*'" my-page.html
  • 您提供给 grep 的模式没有意义。您正在寻找alt=,后跟一系列一个或多个单引号。
  • grep -oP "alt='\K[^']+" filegrep -oP "\salt='\K[^']+" file
  • 试图通过简单的模式匹配来解析 HTML 很容易出错。这里是some examples 的 HTML,它将与 grep 解决方案发生冲突。最安全的方法是使用您使用的任何语言的 HTML 解析器。
  • 谢谢!这是工作!

标签: html grep html-parsing


【解决方案1】:

如果你确定 alt 的参数在单引号之间,你可以做一个

grep -o "alt='[^']*'" file

这会搜索 alt=,然后是单引号,然后是任意数量的非单引号,最后是终止单引号。

【讨论】:

    【解决方案2】:

    您可以将 GNU grep 与 PCRE 正则表达式一起使用:

    grep -oP "alt='(?:\K[^']+|')" file
    

    请参阅regex demo

    匹配:

    • alt=' - 文字子串
    • (?:\K[^']+|') - 匹配的非捕获组
      • \K[^']+ - \K 省略匹配的文本(以便只获取属性值),而[^']+ 匹配除' 之外的一个或多个字符
      • | - 或
      • ' - 单引号。

    online demo

    #!/bin/bash
    s="alt='Text-01'
    alt='Text 02'
    alt=''
    alt='Some long text'"
    grep -oP "alt='(?:\K[^']+|')" <<< "$s"
    

    输出:

    Text-01
    Text 02
    alt=''
    Some long text
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多