grepを使用してLinuxシステム上のファイルからパーティションの日付/時刻を抽出するのに役立ちます。
ソースファイルは、次のデータを含むXMLです。
<item start="20231010073000 +0100" stop="20231010100000 +0100">...</item>
完全な開始日を抽出する必要がありますが、grepを使用すると完全な結果を得ることはできません。私のコード:
for startDate in $(grep -Eo 'start="[0-9]{14} [\+|\-][0-9]{4}"' "$filepath" ); do
echo "$startDate"
done
2つの異なる結果を得る。
start="20231010073000
+0100"
次のように取得できます。
start="20231010073000 +0100"
私は他の例を試しましたが、\s
同じ[[:space:]]
解決策を使用しました。
私のコードにバグがあるようですが、修正することはできません。
どんな助けでもくれてありがとう!
ベストアンサー1
grep
使用またはregex
解析しないでくださいHTML/XML
生のテキスト行を処理するように設計されたツールを使用すると、構造化テキスト(XML / HTMLなど)を解析することはできず、解析することもできません。 XML/HTML を処理する必要がある場合は、XML/HTML パーサーを使用してください。ほとんどの言語にはXML解析サポートが組み込まれており、たとえばコマンドラインシェルですばやく作業を行う必要がある場合などの特殊なツールがありますxidel
。アクセスできない場合は、操作を受け入れないでください。適切なツール。xmlstarlet
xmllint
最も先進的なコマンドラインツールは次のとおりです。xidel
。構文はorよりも直感的でモダンです(XPath3
他のツールが制限されている場合もサポートXPath1
)。以下を参照してください。xmlstarlet
xmllint
xidel -e '//item/@start' -s file.xml
20231010073000 +0100
-e
XPath
e
表現に使用される-s
ilent の場合s
(状態情報なし)
クエリ言語は、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://topswagcode.com/xpath/(インタラクティブXPath
ゲーム、基本が揃っていてインタラクティブに練習したいとき)