Jus*_*tin 1 xml sed regular-expression
不知道为什么我没有得到这个。我一直在搜索和测试我的命令几个小时,但我一无所获。
正文是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><result expand="changes,testResults,metadata,logEntries,plan,vcsRevisions,artifacts,comments,labels,jiraIssues" key="EP-ED-JOB1-174" state="Failed" lifeCycleState="Finished" number="174" ....
Run Code Online (Sandbox Code Playgroud)
我只是想拔出 state="Failed"
零件,它也可以是state="Successful"
.
我已经尝试过一百万种这样的变体:
sed '/state=".*"/p' htmlResponse.txt
Run Code Online (Sandbox Code Playgroud)
但是括号,转义斜杠等似乎与整个文本块相匹配。我的正则表达式有什么问题?
撇开强制性的“您确实应该使用适当的 XML 解析器,因为正则表达式的功能不足以解析 XML”评论,我在您的sed
行中看到了两个问题:
".*"
将从第一个匹配"
到最后一个,因为.
匹配"
sed
命令将/.../p
打印整行。对于快速而肮脏的 HTML 抓取 shell 脚本,我建议以下两件事:
"[^"]*"
匹配“报价,任何数量的非引号字符,最终报价”grep -o
提取与正则表达式匹配的文件位要容易得多所以这会让你的命令更像:
grep -o 'state="[^"]*"'
Run Code Online (Sandbox Code Playgroud)
或者,如果您真的必须使用 sed:
sed -n 's/.*\(state="[^"]*"\).*/\1/p'
Run Code Online (Sandbox Code Playgroud)