迭代在字符串中没有空格作为分隔符的分隔符
问题描述:
我想解析一些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
答
的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
谢谢你,我这个标记为接受的答案,因为回路包含在这一个。你能解释一下grep命令吗?我没有完全理解它。 – manman
'“[^”] *“':匹配双引号后跟任何字符,但不包含双引号('[^”]')。星形量词('*')表示前面的表达式可以匹配零次或多次。上次匹配的字符必须是双引号。 – Cyrus
是否可以将该输出保存到数组中? – manman