Sed
使用 sed 從 XML 文件中獲取特定文本
不知道為什麼我沒有得到這個。我一直在搜尋和測試我的命令幾個小時,但我一無所獲。
正文是:
<?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" ....
我只是想拔出
state="Failed"
部分,它也可能是state="Successful"
。我已經嘗試過一百萬種變體:
sed '/state=".*"/p' htmlResponse.txt
但是括號,轉義斜杠等似乎與整個文本塊匹配。我的正則表達式有什麼問題?
撇開強制性的“你真的應該使用適當的 XML 解析器,因為正則表達式不足以解析 XML”評論,我在你的
sed
行中看到了兩個問題:
".*"
將從第一個匹配"
到最後一個,因為.
匹配"
- 如果它與正則表達式匹配,該
sed
命令將/.../p
列印整行。對於快速而骯髒的 HTML 抓取 shell 腳本,我建議以下兩件事:
- 用於
"[^"]*"
匹配“引號,任意數量的非引號字元,結束引號”grep -o
提取與正則表達式匹配的文件位更容易使用所以這會讓你的命令更像:
grep -o 'state="[^"]*"'
或者,如果你真的必須使用 sed:
sed -n 's/.*\(state="[^"]*"\).*/\1/p'