regex - Grep 排除 curl 主体的注释 <!-- --> 之间的匹配出现次数

标签 regex bash curl awk grep

我对 linux 和 bash 脚本还很陌生。我正在尝试使用 curl 命令读取 xml 文件并计算单词 </entity> 的出现次数

curl -s "https://server:port/app/collection/admin/file?wt=xml&_=12334343432&file=samplefile.xml&contentType=text%2Fxml%3Bcharset%3Dutf-8" | grep '</entity>' -oP | wc -l

这可以正常工作,但是 xml 文件包含如下注释,导致计数错误。

示例 XML 文件

.........
........
 <entity>
.......
.......
</entity>
........
........
<!--
.......
<entity>
........
</entity>
.......
.......
-->
<entity>
.......
........
</entity>

预期的输出应该是 2,因为其中一个匹配项在评论 block 内。

最佳答案

与往常一样,在处理 XML 时,正则表达式是不适合这项工作的工具。使用了解格式的东西。例如,使用 xmllint 和一些 XPath:

curl ... | xmllint --xpath 'count(//entity)' -

(注意尾随的 -;与许多程序不同,如果未在命令行上给出文件名,xmllint 不会自动从标准输入读取)

关于regex - Grep 排除 curl 主体的注释 &lt;!-- --> 之间的匹配出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72228570/

相关文章:

sql - Oracle正则表达式-匹配精确的单词

正则表达式与grep - 匹配未知数量的字母字符?

bash - bash 终端中的 l(小写 L)命令

php - 执行 Curl Multi Exec 而不等待响应

c++ - 使用 OpenSSL 构建 LibCurl 会导致链接器错误

python - 在 Python 中高效地搜索字符串

linux - 当应用程序可以作为系统服务运行时,为什么要使用 nohup?

Bash 脚本转换日期格式

node.js - 使用 json post 进行摘要身份验证的 Curl 命令

java - 使用 Java 的 SQL 正则表达式