2 votes

bash + sed - renvoie les correspondances dans un tableau, problèmes avec les espaces

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é ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X