我正试图在许多标签之间获取文本,我如何使用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
答案 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'/[<]$//'