なぜ私はこれを得ることができないのか分かりません。何時間もコマンドを検索してテストしましたが、何も見つかりませんでした。
テキストは次のとおりです
<?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
しかし、角かっこ、エスケープスラッシュなどはフルテキストブロックと一致するようです。私の正規表現にはどんな問題がありますか?
ベストアンサー1
「正規表現がXMLを解析するのに十分ではないため、適切なXMLパーサーを使用する必要があります」という必須の説明を取り上げて、行にはsed
2つの問題があります。
".*"
"
.
一致するので、最初から最後まで一致します。"
- この
sed
コマンドは/.../p
印刷します全体的に正規表現と一致する場合。
迅速で汚いHTMLスクレイピングシェルスクリプトのために、次の2つのことをお勧めします。
"[^"]*"
「引用符、引用符以外の文字、閉じる引用符」と一致します。grep -o
正規表現に一致するファイルの部分を抽出する方がはるかに簡単です。
したがって、これはコマンドを次のようにします。
grep -o 'state="[^"]*"'
または本当に〜しなければならないsedを使用してください:
sed -n 's/.*\(state="[^"]*"\).*/\1/p'