grepコマンドを使用してファイルから日付全体を抽出できますか?

grepコマンドを使用してファイルから日付全体を抽出できますか?

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。アクセスできない場合は、操作を受け入れないでください。適切なツール。xmlstarletxmllint


最も先進的なコマンドラインツールは次のとおりです。xidel。構文はorよりも直感的でモダンです(XPath3他のツールが制限されている場合もサポートXPath1)。以下を参照してください。xmlstarletxmllint

xidel -e '//item/@start' -s file.xml
20231010073000 +0100
  • -eXPath e表現に使用される
  • -silent の場合s(状態情報なし)

クエリ言語は、XPathXML / 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ゲーム、基本が揃っていてインタラクティブに練習したいとき)

おすすめ記事