Daten aus Shell filtern

Reficul

Lieutenant
Registriert
Aug. 2006
Beiträge
525
Hallo Community,

ich will die Enfernung von iBeacons abfragen, es handelt sich dabei um Bluetooth LE. Bis jetzt bekomme ich dies mit

Code:
hcidump - a | egrep 'RSSI|bdaddr'

hin. daraus folgt diese Ausgabe:

Code:
 bdaddr 20:C3:8F:D1:0E:B1 (Public)
  RSSI: -28
  bdaddr 20:C3:8F:D1:0E:B1 (Public)
  RSSI: -28
  bdaddr 20:C3:8F:D1:0E:B1 (Public)
  RSSI: -31
  bdaddr 20:C3:8F:D1:0E:B1 (Public)
  RSSI: -32
  bdaddr 20:C3:8F:D1:0E:B1 (Public)
  RSSI: -28
  bdaddr 20:C3:8F:D1:0E:B1 (Public)
  RSSI: -28
  bdaddr DD:45:C9:26:61:51 (Random)
  RSSI: -57
  bdaddr DD:45:C9:26:61:51 (Random)
  RSSI: -60
  bdaddr 20:C3:8F:D1:0E:B1 (Public)
  RSSI: -29

nun würde ich gerne aber nur den RSSI-Wert für ein bestimmtes Gerät abfragen wollen, leider hab ich dazu noch keine Option gefunden.

Ich hab schon über sed, awk und regex an alles gedacht, aber ich bin in den Sachen nicht besonders bewandert und hoffe deswegen auf Unterstützung aus der Community.

Gruß Adrian
 
q&d:
Code:
sed 's/^ *//g;:a;N;$!ba;s/\n//g;s/bdaddr/\nbdaddr/g'
als gesamtbefehl:
Code:
hcidump - a | egrep 'RSSI|bdaddr'|sed 's/^ *//g;:a;N;$!ba;s/\n//g;s/bdaddr/\nbdaddr/g'

entfernt erstmal alle Leerzeichen am Zeilenanfang:
Code:
s/^ *//g

entfernt sämtliche Umbrüche:
Code:
:a;N;$!ba;s/\n//g

fügt vor "bdaddr" wieder einen Umbruch ein
Code:
s/bdaddr/\nbdaddr/g

da kommt dann sowas raus:
Code:
bdaddr 20:C3:8F:D1:0E:B1 (Public)  RSSI: -28
bdaddr 20:C3:8F:D1:0E:B1 (Public)  RSSI: -28
bdaddr 20:C3:8F:D1:0E:B1 (Public)  RSSI: -31
bdaddr 20:C3:8F:D1:0E:B1 (Public)  RSSI: -32
bdaddr 20:C3:8F:D1:0E:B1 (Public)  RSSI: -28
bdaddr 20:C3:8F:D1:0E:B1 (Public)  RSSI: -28
bdaddr DD:45:C9:26:61:51 (Random)  RSSI: -57
bdaddr DD:45:C9:26:61:51 (Random)  RSSI: -60
bdaddr 20:C3:8F:D1:0E:B1 (Public)  RSSI: -29

und da kann man ja auf die gewünschte Adresse noch einen grep machen

es könnte hübscher sein, wenn ich mit endlich mal mit dem Linebuffer von sed auseinandersetzen würde, aber das tut's hoffentlich erstmal
 
Code:
hcidump - a | egrep 'RSSI|bdaddr'|sed 's/^ *//g;:a;N;$!ba;s/\n//g;s/bdaddr/\nbdaddr/g'

hab ich abgetippt und mehrmals überprüft, aber es erzeugt gar keine Ausgabe mehr.

Gruß Adrian
 
Du kannst deinen ursprünglichen Befehl nehmen und "| grep -A1 <bdaddr-Suche>" anhängen. Die Option -A1 gibt die getroffenen Zeilen und die jeweils nachfolgende Zeile aus (A steht für after).
 
Ach super, das hab ich wohl überlesen im Manual, oder einfach nicht verstanden das mir das ja auch hilft.

Es funktioniert super, aber meine Ausgabe ist sehr Träge, er macht eine Weile nichts und dann kommt ein ganzer Block an Ausgaben. Als wenn er warten würde bis er einen Buffer gefüllt hat. Bei Ausgaben mit weniger grep und pipes hab ich das nicht. kann das schon Auslastung sein? Oder hat jemand eine Idee woran das liegen könnte?

Gruß Adrian
 
Zurück
Oben