Utilisation de lignes individuelles à partir des sorties grep

J'essaye d'attraper des lignes de grep et de les sortinger dans une autre command, la command que j'utilise pour grepping atm est la suivante (n'a pas encore été coupé assez pour ce que je vais l'utiliser, mais cela donne un meilleur context) :

iwlist wlan0 scanning | grep -oE '(ESSID:|Quality=|Encryption Key:).*' 

La sortie ressemble à ceci (mais changera selon l'location de mon ordinateur):

 Quality=64/70 Signal Level=-49dBm Encryption key:on ESSID:"Hringdu_20558" Quality=61/70 Signal Level=-48 dBm Encryption key:on ESSID:"SiminnEBE932" Quality=30/70 Signal Level=-71 dBm Encryption key:on ESSID:"Siminn106C46 Quality=28/70 Signal Level=-83 dBm Encryption key:on ESSID:"SiminnECC63F" 

Je veux utiliser ces lignes individuellement pour exécuter une autre command

 $ssid=$(zenity --list --text "Available Networks" --list --column "ESSID" --column "Secure" --column "Signal" "$ESSID" "$ENC" "$Signal"); 

Ce sont les débuts d'une invite de sélection rapide de réseau sans fil. $ ESSID / $ ENC / $ Le signal serait basé sur la sortie du grep précédent, donc ce que je dois faire essentiellement après avoir travaillé un peu plus sur la sortie grep pour ressembler finalement à ceci après l'avoir découpé avec cut / awk / sed:

 91% on Hringdu_20558 

(note: j'obtiens le pourcentage en multipliant 64 par 10 puis en divisant par 7; 64 * 10/7)

Est d'appliquer ces lignes récursivement pour chaque ESSID détecté dans la command zenity via des scripts. Et pour append aux problèmes; comme vous pouvez remarquer que la sortie grep est dans l'ordre inverse de la command zenity, cela signifie que "Hringdu_20558" devrait entrer en premier et "87%" devrait entrer en dernier.

En d'autres termes, dans ce scénario spécifique, je dois saisir la troisième ligne de la sortie grep et l'append à l'autre command, puis remonter les 2 lignes précédentes et répéter ceci pour la troisième ligne après la ligne de départ il n'y a plus de lignes.

En substance, la command zenity finale devrait finir par ressembler à ceci basé sur les sorties ci-dessus:

 $ssid=$(zenity --list --text "Available Networks" --list --column "ESSID" --column "Secure" --column "Signal" "Hringdu_20558" "on" "91%" "SiminnEBE932" "on" "87%" "Siminn106C46" "on" "43%" "SiminnECC63F" "on" "40%"); 

Comment puis-je faire ceci? Peut-on le faire avec des scripts shell simples?

Je me retrouve avec quelque chose comme ça:

 ssid=$(iwlist wlan0 scanning | awk -F: ' BEGIN{ printf "zenity --list --text \"Available Networks\" --list --column ESSID --column Secure --column Signal "; } /Quality/{ split($0,x,"="); Quality = int(x[2]*100/70+.5); } /Encryption/{ Encryption = $2; } /ESSID/{ ESSID = $2; printf "%s \"%s\" \"%s%%\" ", ESSID, Encryption, Quality }' | sh) 

N'utilise pas vraiment grep, mais il fait ce que vous voulez.