URL: https://linuxfr.org/forums/programmation-shell/posts/sed-cest-dien Title: sed, c'est dien Authors: gremous Date: 2009年07月09日T13:38:53+02:00 Tags: Score: 2 Bonjour :) J'ai la joie de me frotter à sed. Chaque fois j'apprends une astuce. Ca fait beaucoup d'astuces je trouve :-) J'ai ce genre de texte à traiter: Unit UnitType Status %Cmpl Stripe Size(GB) Cache AVerify IgnECC ------------------------------------------------------------------------------ u0 RAID-1 OK - - 698.637 ON - - Port Status Unit Size Blocks Serial --------------------------------------------------------------- p0 OK u0 698.63 GB 1465149168 GTC200P8GXB012 p1 OK u0 698.63 GB 1465149168 GTC200P8GXB5G4 Je sors ça avec la commande: tw_cli /$(tw_cli show | grep '^c[0-9] ' | cut --characters=1-2) show C'est pour surveiller du RAID matériel 3ware. Ce qui m'intéresse, c'est d'extraire les lignes ne contenant pas 'OK'. J'ai donc deux groupes de lignes qui suivent '------'. La fin de ces groupes est une ligne vide. Je peux résoudre mon problème à coups de grep et de cut, mais je veux apprendre à utiliser sed de meilleure manière. A moins que awk soit plus indiqué dans ce cas précis ? Actuellement j'utilise ça: echo ' Unit UnitType Status %Cmpl Stripe Size(GB) Cache AVerify IgnECC ------------------------------------------------------------------------------ u0 RAID-1 OK - - 698.637 ON - - Port Status Unit Size Blocks Serial --------------------------------------------------------------- p0 OK u0 698.63 GB 1465149168 GTF200P8GZB0XF p1 ERROR u0 698.63 GB 1465149168 GTF200P8GZB5LF ' | grep '^[pu][0-9]' | grep --invert-match 'OK' Ca fonctionne bien, mais ce n'est pas idéal. Dans mon idée, il faut que sed affiche les lignes souhaitées (uniquement le champ voulu de chaque ligne), puis n'affiche finalement que celles ne contenant pas OK. Au final, j'ai un affichage vierge si tout est bon, sinon j'ai au moins une ligne. Je sais faire un traitement sur des groupes de lignes avec: sed -n /^---/,/^$/ mon_traitement_ici Par contre je ne sais pas comment faire pour afficher uniquement le troisième champ si pas OK, puis le second champ si pas OK. Je cale :)

AltStyle によって変換されたページ (->オリジナル) /