grep很多标签之间的文本

时间:2019-04-12 07:28:10

标签: bash grep

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

<member><name>blogName</name><value><string>Secret Labs - NTB4WORLD</string></value></member>

我已经尝试过:

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

但它返回:

  

Secret Labs - NTB4WORLD</string></value></member>

如果我只需要结果

  

秘密实验室-NTB4WORLD

3 个答案:

答案 0 :(得分:2)

xmllint --xpath "string(//string)" your_file

答案 1 :(得分:0)

根据建议使用XML解析器,以防万一您仍然想使用grep,请尝试:

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

或者如果您在*BSD/macOS中,请尝试使用pcregrep

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

可以将\K理解为排除在它前面左边的所有内容,只返回右边的部分.+?(?=</string>),直到找到</string>

答案 2 :(得分:0)

我已经在命令提示符下对此进行了测试,如果文本与往常一样,您可以尝试使用此方法,该方法首先包含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'/[<]$//'