Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Bash:在字符串中使用grep获得所有字符串匹配的最佳方法_Xml_Bash - Fatal编程技术网

Xml Bash:在字符串中使用grep获得所有字符串匹配的最佳方法

Xml Bash:在字符串中使用grep获得所有字符串匹配的最佳方法,xml,bash,Xml,Bash,我在找到从字符串中获取所有匹配值的方法时遇到了一些困难。我将XML字符串存储在变量中。从这个变量中,我用grep提取一个字符串。这对一个匹配很有效,但由于grep只返回第一个匹配的值,所以它不能完全按照我的要求工作 XML="..." VALUE=($(grep -oP "<tag>(.*)</tag>" <<<"${XML}" | cut -d ">" -f 2 |

我在找到从字符串中获取所有匹配值的方法时遇到了一些困难。我将XML字符串存储在变量中。从这个变量中,我用grep提取一个字符串。这对一个匹配很有效,但由于grep只返回第一个匹配的值,所以它不能完全按照我的要求工作

XML="..."

VALUE=($(grep -oP "<tag>(.*)</tag>" <<<"${XML}" | cut -d ">" -f 2 | cut -d "<" -f 1))
XML=“…”

VALUE=($(grep-oP“(.*)”拆分为多行并运行grep命令

VALUE="$(sed 's#</tag>#</tag>\n#g' <<<"${XML}" | grep -oP "<tag>(.*)</tag>" | cut -d ">" -f 2 | cut -d "<" -f 1)"

VALUE=”$(sed's###\n#g'我知道这不是理想的解决方案,但我有一个非常基本的XML,它没有任何属性。你应该添加一段预期的XML。另外,你不会用
grep
找到解决方案。你需要查找组之类的,试试
perl-pe's//'$file
。我相信这就是你要找的:@Ba你:这就是为什么使用grep从XML中提取信息通常是一个愚蠢的想法的原因之一。但是OP似乎意识到了这种谬误——至少我从他的评论中得出结论——所以对于他给出的具体问题,我认为etsuhisa的回答是相当合理的。我在我的文档中添加了简短的XML示例。看起来这是因为我无法使它与您的解决方案(对于'name'标记)一起工作。可能是因为空格吗?很抱歉,回复太晚了。您是否已将
标记的
部分更改为
名称
如下?VALUE=“$(sed's##\n#g”
VALUE="$(sed 's#</tag>#</tag>\n#g' <<<"${XML}" | grep -oP "<tag>(.*)</tag>" | cut -d ">" -f 2 | cut -d "<" -f 1)"