Sed

使用 sed 從 XML 文件中獲取特定文本

  • February 3, 2021

不知道為什麼我沒有得到這個。我一直在搜尋和測試我的命令幾個小時,但我一無所獲。

正文是:

<?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行中看到了兩個問題:

  1. ".*"將從第一個匹配"到最後一個,因為.匹配"
  2. 如果它與正則表達式匹配,該sed命令將/.../p列印整行

對於快速而骯髒的 HTML 抓取 shell 腳本,我建議以下兩件事:

  1. 用於"[^"]*"匹配“引號,任意數量的非引號字元,結束引號”
  2. grep -o提取與正則表達式匹配的文件位更容易使用

所以這會讓你的命令更像:

grep -o 'state="[^"]*"'

或者,如果你真的必須使用 sed:

sed -n 's/.*\(state="[^"]*"\).*/\1/p'

引用自:https://unix.stackexchange.com/questions/398439