J'essaie d'analyser la sortie d'un contrôleur RAID HP qui renvoie quelque chose comme ceci :
Array 1:
Size: 100GB
Status: OK
Caching: Enabled
OS Status: LOCKED
Label: asdfasdf
Array 2:
Size: 100GB
Status: OK
Caching: Enabled
OS Status: LOCKED
Label: asdfasdf
Array 3:
Size: 300GB
Status: OK
Caching: Enabled
OS Status: LOCKED
Label: asdfasdf
Array 4:
Size: 150GB
Status: Interim Recovery Mode
Caching: Enabled
OS Status: LOCKED
Label: asdfasdf
Je veux obtenir tous les Status: (.*)
(pas celles qui commencent par <something>Status: (.*)
. J'ai la commande suivante qui retourne les données dans un tableau :
array=( `sed -n 's/^[[:space:]]*Status:[[:space:]]\([a-zA-Z ]*\)$/\1/p' raid.txt` )
echo "${array[0]}|${array[1]}|${array[2]}|${array[3]}|${array[4]}|${array[5]}"
num=1
for i in ${array[@]}
do
echo "${num} ${i}"
num=$(expr $num + 1)
done
Cela renvoie la sortie :
OK|OK|OK|Interim|Recovery|Mode
1 OK
2 OK
3 OK
4 Interim
5 Recovery
6 Mode
Comme vous pouvez le constater, la correspondance avec les espaces est répartie sur trois clés de tableau distinctes, alors qu'elle ne devrait en occuper qu'une seule.
Je pense que le sed
est mon problème, car mon test pour renvoyer les clés individuelles du tableau montre qu'elles sont séparées à ce stade. Quelqu'un peut-il suggérer comment faire en sorte que sed renvoie les correspondances séparées par des espaces dans leur propre clé ?