2017-04-15 149 views
-1

我想解析一些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循環的方式隔開的空間字符串這不鍛鍊。 我需要帶空格的名字。 (注:有些名字末尾有空格)

有誰知道如何正確地做到這一點?

回答

0

我建議:

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

謝謝你,我這個標記爲接受的答案,因爲迴路包含在這一個。你能解釋一下grep命令嗎?我沒有完全理解它。 – manman

+0

'「[^」] *「':匹配雙引號後跟任何字符,但不包含雙引號('[^」]')。星形量詞('*')表示前面的表達式可以匹配零次或多次。上次匹配的字符必須是雙引號。 – Cyrus

+0

是否可以將該輸出保存到數組中? – manman

0

的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