Bash grep在许多标记之间显示文本

Bash grep在许多标记之间显示文本,bash,grep,Bash,Grep,我试图在许多标签之间获取文本,如何使用grep获取文本? 卷曲回程: <member><name>blogName</name><value><string>Secret Labs - NTB4WORLD</string></value></member> 我已经试过了: grep -Po '(?<=<member><name>blogName</name>

我试图在许多标签之间获取文本,如何使用grep获取文本? 卷曲回程:

<member><name>blogName</name><value><string>Secret Labs - NTB4WORLD</string></value></member>
我已经试过了:

grep -Po '(?<=<member><name>blogName</name><value><string>)[^"]*'
但它返回:

秘密实验室-NTB4WORLD

如果我需要结果怎么办

秘密实验室-NTB4WORLD


根据建议,使用XML解析器,如果您仍然想使用grep,请尝试:

grep -oP "<string>\K.+?(?=</string>)" file.xml

可以将\K读取为排除其前面左侧的所有内容,并仅返回右侧部分。+??=直到找到为止。

我已在命令提示符下测试此方法如果文本与往常一样,可以尝试此方法,此方法包括sed和awk命令,首先我设置空格,然后我使用awk读取并打印值

echo "<member><name>blogName</name><value><string>Secret Labs - NTB4WORLD</string></value></member>" | sed 's/\(\b[<||>]\)/\1\ /g' | awk '{for (I=1;I<=NF;I++) if ($I == "<string>") {print $(I+1)" " $(I+2) " " $(I+3) " " $(I+4) };}' | sed s'/[<]$//'

[^]*>[^使用XML解析器感谢您实际演示一个工具,而不是简单地引用它。
pcregrep -o "<string>\K.+?(?=</string>)" file.xml
echo "<member><name>blogName</name><value><string>Secret Labs - NTB4WORLD</string></value></member>" | sed 's/\(\b[<||>]\)/\1\ /g' | awk '{for (I=1;I<=NF;I++) if ($I == "<string>") {print $(I+1)" " $(I+2) " " $(I+3) " " $(I+4) };}' | sed s'/[<]$//'