如何使用 grep 查找 html 标签的值

How to use grep to find value of html tag

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

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'

你能帮我实现吗?

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

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

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

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

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

参见regex demo

它匹配:

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

参见 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