我需要以這種格式在檔案(xml)中查找日期2021-06-25T21:17:51Z并用這種格式替換它們2021-06-25T21:17:51.001Z
我考慮過使用正則運算式,sed但反向參考不起作用。
1.xml 可能看起來像這樣,但我在這些檔案中有更多欄位,而且我的欄位已經正確。
<Doc>
<PUB_DATE>2021-06-25T21:17:51Z</PUB_DATE><!-- to change -->
<DATE_COLLECT_100>2021-06-25T21:17:51Z</DATE_COLLECT_100><!-- to change -->
<DATE_CREATION>2021-06-25T21:17:51.001Z</DATE_CREATION><!-- keep it like this -->
</Doc>
所需的輸出是
<Doc>
<PUB_DATE>2021-06-25T21:17:51.001Z</PUB_DATE><!-- to change -->
<DATE_COLLECT_100>2021-06-25T21:17:51.001Z</DATE_COLLECT_100><!-- to change -->
<DATE_CREATION>2021-06-25T21:17:51.001Z</DATE_CREATION><!-- keep it like this -->
</Doc>
這是我的 sed
$ sed -Ee 's#<(PUB_DATE|DATE_COLLECT_100){1}>([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}T[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2})Z</\1>#<\1>\2.001Z</\1>#' 1.xml

在搜索部分使用時,sed 是否允許反向參考?我錯過了什么sed嗎?有錯誤嗎?
Sed 版本:嗯...我不知道,sed --version sed -v man sed不給它。我在 OSX 上。
uj5u.com熱心網友回復:
BSD 或 OSX sed 不支持\1正則運算式模式中的反向參考。
您的選擇是perl:
perl -pe 's#<(PUB_DATE|DATE_COLLECT_100)>(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})Z</\1>#<\1>\2.001Z</\1>#' 1.xml
或者gnu sed使用home brew安裝程式安裝,然后使用:
gsed -E 's#<(PUB_DATE|DATE_COLLECT_100)>([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}T[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2})Z</\1>#<\1>\2.001Z</\1>#' 1.xml
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420837.html
標籤:
上一篇:使用正則運算式從python中的電子郵件文本中提取收件人和發件人
下一篇:長度為偶數的單詞的正則運算式
