ari*_*ris 4 grep bash xml text-processing
我需要帮助使用 grep 从 Linux 系统上的文件中提取分区日期时间。
源文件是一个 XML,包含以下数据:
<item start="20231010073000 +0100" stop="20231010100000 +0100">...</item>
Run Code Online (Sandbox Code Playgroud)
我需要提取完整的开始日期,但使用 grep 我无法得到完整的结果。我的代码:
for startDate in $(grep -Eo 'start="[0-9]{14} [\+|\-][0-9]{4}"' "$filepath" ); do
echo "$startDate"
done
Run Code Online (Sandbox Code Playgroud)
我得到了两个不同的结果:
start="20231010073000
+0100"
Run Code Online (Sandbox Code Playgroud)
我可以得到它如下:
start="20231010073000 +0100"
Run Code Online (Sandbox Code Playgroud)
我尝试过\s
、[[:space:]]
和其他示例,但使用相同的解决方案。
我的代码似乎有错误,但我无法修复它!
我很感谢任何形式的帮助!
不要使用grep
或regex
解析HTML/XML
您不能、不得使用旨在处理原始文本行的工具解析任何结构化文本,例如 XML/HTML。如果需要处理 XML/HTML,请使用 XML/HTML 解析器。绝大多数语言都内置了对解析 XML 的支持,并且有专门的工具,例如xidel
、xmlstarlet
或者xmllint
如果您需要从命令行 shell 快速进行操作... 如果您无法访问适当的工具,切勿接受工作。
最先进的命令行工具是xidel
. 语法比or更直观/现代(并且支持XPath3
其他工具受限制的情况XPath1
),请参阅:xmlstarlet
xmllint
xidel -e '//item/@start' -s file.xml
20231010073000 +0100
Run Code Online (Sandbox Code Playgroud)
-e
用于XPath
e
表达-s
对于s
ilent(无状态信息)查询语言XPath
在许多情况下对于解析 XML/HTML 非常有用。
XPath
教程:
https://developer.mozilla.org/en-US/docs/Web/XPath
http://www.w3schools.com/xpath/xpath_functions.asp
http://stackoverflow.com/tags/xpath/info https://www.w3schools.com/xpath/xpath_functions.asp http://stackoverflow.com/tags/xpath/info
https:// /topswagcode.com/xpath/(互动XPath
游戏,当您具备基础知识并想要互动练习时)