有沒有可以從 XML 檔案中刪除註解的命令列工具?或者我需要編寫一個使用 XML 解析器的小程式來執行此操作?
更新:我對僅處理所有可能的 XML 檔案的子集的解決方案不感興趣。
例如,正規表示式無法處理 XML 解析。
答案1
我會這樣做:
cat myfile.xml | sed '/<!--.*-->/d' | sed '/<!--/,/-->/d' > cleaned.xml
或者:
awk 'in_comment&&/-->/{sub(/([^-]|-[^-])*--+>/,"");in_comment=0}
in_comment{next}
{gsub(/<!--+([^-]|-[^-])*--+>/,"");
in_comment=sub(/<!--+.*/,"");
print}'
或者:
xmlstarlet ed -d '//comment()' file.xml
答案2
擴展最上面的答案。如果您只想刪除註解而不是整行,您可能應該使用:
sed 's/<!--.*-->//'
就我而言,我有一個縮小的 XML 文件,其中整個內容都在一行中,並且由於以前的解決方案會刪除註釋所在的整行,因此它將完全清除我的文件。
答案3
這對於從 xml 中清除多行註釋(例如失敗的測試)很有用,至少是您手動選擇的並且對最終用戶有幫助的註釋:
perl -i -w -0777pe 's/<!--(.(?<!(HELP|TODO)))*?-->//sg' somefile.xml
有關相關正規表示式的詳細資訊:https://stackoverflow.com/a/1240293/1422630
如果有一種方法可以獲得相同的結果但使用 xmlstarlet,我會更喜歡,因為可能有一些正規表示式可能無法處理的異常,但現在這是我必須使用的。