所以我有这个模式,整个东西只有一行
<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
答案2
如果你想以更有条理的方式解决这个问题,你可以
用于
xmllint
将输入转换为有效的 XML(本质上是添加根元素并&
用实体替换字符)用于
xmlstarlet
选择alt
标签(可选)取消转义
&
实体
例如给定
$ 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"