迭代在字符串中没有空格作为分隔符的分隔符

问题描述:

我想解析一些xmllint的输出,因为几个小时,但我不能让它像我需要它的工作。迭代在字符串中没有空格作为分隔符的分隔符

输出的"xmllint --xpath "//fub/@name" menu.xml"*

NAME = “凯塞尔” NAME = “拉格” NAME = “河豚” NAME = “Boiler.sen” NAME = “Boiler.jun” NAME = “香港资深” 名= “HK少年” NAME = “FBH” 名= “太阳能” NAME = “F.Wärme” NAME = “SYS”

现在我需要单独所有的名字(包括空格),并让他们在分离变量。 我的做法是这样的:

fubNames=$(xmllint --xpath "//fub/@name" menu.xml | sed 's/name=//g') 
for name in $fubNames 
do 
    echo $name 
done 

但由于for循环的方式隔开的空间字符串这不锻炼。 我需要带空格的名字。 (注:有些名字末尾有空格)

有谁知道如何正确地做到这一点?

我建议:

xmllint --xpath "//fub/@name" menu.xml | grep -o '"[^"]*"' | while IFS= read -r name; do echo "$name"; done 
+0

谢谢你,我这个标记为接受的答案,因为回路包含在这一个。你能解释一下grep命令吗?我没有完全理解它。 – manman

+0

'“[^”] *“':匹配双引号后跟任何字符,但不包含双引号('[^”]')。星形量词('*')表示前面的表达式可以匹配零次或多次。上次匹配的字符必须是双引号。 – Cyrus

+0

是否可以将该输出保存到数组中? – manman

的grep方法:

xmllint --xpath "//fub/@name" menu.xml | grep -Po 'name=\K\"([^"]+)\"' 

输出:

"Kessel" 
"Lager" 
"Puffer " 
"Boiler.sen" 
"Boiler.jun" 
"HK Senior" 
"HK Junior" 
"Fbh" 
"Solar" 
"F.Wärme" 
"Sys " 

-P选项,允许Perl的正则表达式

-o选项,讲述只打印匹配部分

+0

谢谢你的工作方法 – manman