XMLとシェルスクリプト,絶望的に相性が悪いのよな。なぜならW3は字句指向${}^\text{[要出典]}$で,Unixは行指向だから。
(端的すぎて色々情報欠落してるけど)
もう,それこそsedやなにかで有限状態機械を作るくらいしか「XMLを正確に処理する」方法がない気がする。
それかPOSIX Cの範囲でXMLを行指向のもの[※]に変換するXML処理系を書いて,それをsed(1)のような外部コマンドの一環として利用するかしかない。
[※] 「Unixの行指向に合わせたXMLと等価の形式」というのはXPath-valueという形式が提案されている。とはいえ実装は一例のみだが。
https://github.com/ShellShoccar-jpn/Parsrs/blob/de5d62313f5047daa72a6cf271a549d28b2a6c67/parsrx.sh#L8