在 bash-shell 中迭代没有 space 作为分隔符的字符串
Iterate over string without space as seperator in bash-shell
几个小时以来我一直在尝试解析 xmllint 的一些输出,但我无法让它像我需要的那样工作。
"xmllint --xpath "//fub/@name" menu.xml"*
的输出
name="Kessel" name="Lager" name="Puffer " name="Boiler.sen"
name="Boiler.jun" name="HK Senior" name="HK Junior" name="Fbh"
name="Solar" name="F.Wärme" name="Sys "
现在我需要将所有名称(包括 spaces)分开并将它们放入单独的变量中。
我的方法是:
fubNames=$(xmllint --xpath "//fub/@name" menu.xml | sed 's/name=//g')
for name in $fubNames
do
echo $name
done
但这并不能解决问题,因为 for 循环将字符串分隔在 space 上。
我需要带有 space 的名字。 (注意:有些名字最后有一个 space)
有谁知道如何正确执行此操作?
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
选项,告诉只打印匹配的部分
我建议:
xmllint --xpath "//fub/@name" menu.xml | grep -o '"[^"]*"' | while IFS= read -r name; do echo "$name"; done
几个小时以来我一直在尝试解析 xmllint 的一些输出,但我无法让它像我需要的那样工作。
"xmllint --xpath "//fub/@name" menu.xml"*
name="Kessel" name="Lager" name="Puffer " name="Boiler.sen" name="Boiler.jun" name="HK Senior" name="HK Junior" name="Fbh" name="Solar" name="F.Wärme" name="Sys "
现在我需要将所有名称(包括 spaces)分开并将它们放入单独的变量中。 我的方法是:
fubNames=$(xmllint --xpath "//fub/@name" menu.xml | sed 's/name=//g')
for name in $fubNames
do
echo $name
done
但这并不能解决问题,因为 for 循环将字符串分隔在 space 上。 我需要带有 space 的名字。 (注意:有些名字最后有一个 space)
有谁知道如何正确执行此操作?
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
选项,告诉只打印匹配的部分
我建议:
xmllint --xpath "//fub/@name" menu.xml | grep -o '"[^"]*"' | while IFS= read -r name; do echo "$name"; done