基于标记的Shell grep XML内容

基于标记的Shell grep XML内容,xml,bash,grep,Xml,Bash,Grep,我有一个xml文件,我想从中提取两个xml标记内的内容,如下所示: <foo id="001"> ... any String ... </foo> ... 任何字符串。。。 由于标识符的原因,起始标记行是唯一的,但结束标记可以出现任意次数。有没有一种方法可以使用grep输出这两个标记中的字符串?试试这个魔术: grep -oPz '(?s)<foo id="001".*?</foo>\n' file.xml

我有一个xml文件,我想从中提取两个xml标记内的内容,如下所示:

<foo id="001">
... any String ...
</foo>

... 任何字符串。。。
由于标识符的原因,起始标记行是唯一的,但结束标记可以出现任意次数。有没有一种方法可以使用
grep
输出这两个标记中的字符串?

试试这个魔术:

grep -oPz '(?s)<foo id="001".*?</foo>\n' file.xml
grep-oPz'(?s)试试这个魔术:

grep -oPz '(?s)<foo id="001".*?</foo>\n' file.xml

grep-oPz'(?s)美妙的魔法!为什么我在执行
grep时看不到输出中的零字节…|xxd
我刚刚更新了描述,因为我想我复制了-Z而不是-Z的描述。要回答您的问题,我认为这是因为输入不包含任何NUL,但您需要覆盖默认行分隔符的选项。真神奇!为什么我在执行
grep时看不到输出中的零字节…|xxd
我刚刚更新了描述,因为我想我复制了-Z而不是-Z的描述。要回答您的问题,我认为这是因为输入不包含任何NUL,但您需要覆盖默认\n行分隔符的选项。