shell - 如何匹配 xml 标签之间的内容?

shell - How to match content between xml tags?

我有这个文件:

<?xml version="1.0" encoding="utf-8"?>
<response>
        <Count>1</Count>
        <Messages>
                <Message>
                        <Smstat>0</Smstat>
                        <Index>40001</Index>
                        <Phone>234</Phone>
                        <Content>Poin Bonstri kamu: 358

Sisa Kuota kamu :
Kuota WA.Line 18 MB s.d 06&#x2F;08&#x2F;2019 19:33:46
Kuota Reguler 1478 MB s.d 02&#x2F;08&#x2F;2019 05:36:44
Temukan beragam paket lain di bima+ https:&#x2F;&#x2F;goo.gl&#x2F;RQ1DBA</Content>
                        <Date>2019-08-01 13:28:04</Date>
                        <Sca></Sca>
                        <SaveType>4</SaveType>
                        <Priority>0</Priority>
                        <SmsType>2</SmsType>
                </Message>
        </Messages>
</response>

我想匹配 <Content></Content> 之间的文本。我试过:

tr '\n' ' ' < input_file | grep -E "^<Content>.*</Content>$"

但是没有用。请注意,我使用 ash shell 而不是 bash。我该怎么做?

如果你有 PCRE 能力 grep 你可以使用积极的前瞻和 -behind:

$ tr '\n' ' ' < file | grep -Po "(?<=<Content>).*(?=</Content>)"

输出:

Poin Bonstri kamu: 358  Sisa Kuota kamu : Kuota WA.Line 18 MB s.d 06&#x2F;08&#x2F;2019 19:33:46 Kuota Reguler 1478 MB s.d 02&#x2F;08&#x2F;2019 05:36:44 Temukan beragam paket lain di bima+ https:&#x2F;&#x2F;goo.gl&#x2F;RQ1DBA