使用 grep 查找标签并获取其后的任意字符串

使用 grep 查找标签并获取其后的任意字符串

所以我有这个模式,整个东西只有一行

<img  itemprop="image"  class="hovered__image jsOpenGallery lazyload" data-src="//static.yellowpages.ca/ypca/ypui-6.65.0.0-20220419.0826/resources/images/serp/photo-gallery-icon.svg" alt="Drain King Plumbers - Plumbers & Plumbing Contractors"/><img  itemprop="image"  class="jsMerchantLogo lazyload" data-src="https://ssmscdn.yp.ca/image/resize/8bfbcba8-0a3e-48d3-b64b-16df5995779c/yp-serp-thumbnail/1.jpg" alt="Drain King Plumbers - Plumbers & Plumbing Contractors"/>

这里我使用表达式“alt=”来查找标签,并且我需要像上面的代码一样获取其后的企业名称

alt="Drain King Plumbers - Plumbers & Plumbing Contractors"

名称可以是任何内容,但始终括在“ ”中。我可以使用 grep 返回类似alt="business name"

答案1

htmlq

您可以使用htmlq喜欢杰奇,但针对的是 HTML。)。使用酿造:brew install htmlq并将你的字符串传输到

| htmlq --attribute alt img

还检查 HTML小狗, 和西气用于 XML。

grep (PCRE)

一种不太优雅的方式(你不能用正则表达式真正解析[X] HTML)就是使用 grep 和--perl-regexp--only-matching使用正则表达式向后看

| grep -Po "(?<= alt=\")[^\"]*"

另请检查ripgrep

答案2

如果你想以更有条理的方式解决这个问题,你可以

  • 用于xmllint将输入转换为有效的 XML(本质上是添加根元素并&用实体替换字符)

  • 用于xmlstarlet选择alt标签

  • (可选)取消转义&amp;实体

例如给定

$ cat file
<img  itemprop="image"  class="hovered__image jsOpenGallery lazyload" data-src="//static.yellowpages.ca/ypca/ypui-6.65.0.0-20220419.0826/resources/images/serp/photo-gallery-icon.svg" alt="Drain King Plumbers - Plumbers & Plumbing Contractors"/><img  itemprop="image"  class="jsMerchantLogo lazyload" data-src="https://ssmscdn.yp.ca/image/resize/8bfbcba8-0a3e-48d3-b64b-16df5995779c/yp-serp-thumbnail/1.jpg" alt="Drain King Plumbers - Plumbers & Plumbing Contractors"/>

然后

$ xmllint --html --xmlout --dropdtd file 2>/dev/null |
    xmlstarlet sel -t -v '//img/@alt' -n | xmlstarlet unesc
Drain King Plumbers - Plumbers & Plumbing Contractors
Drain King Plumbers - Plumbers & Plumbing Contractors

如果你有 kislyuk 的yq:命令行 YAML/XML/TOML 处理器 - YAML、XML、TOML 文档的 jq 包装器您可以使用xq-xmlstarlet但是输入仍然需要被处理成有效的 XML:

$ xmllint --html --xmlout --dropdtd file 2>/dev/null | xq '.. | .img? | .[]? | ."@alt"'
"Drain King Plumbers - Plumbers & Plumbing Contractors"
"Drain King Plumbers - Plumbers & Plumbing Contractors"

相关内容