![]() |
Betriebssystem: Mac OS,Linux
Gute Tutorials / Beispiele zu sed und awk gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich bastel gerade an meinem neuen MacBook Air rum, und zwar erstelle ich gerade einen neuen Desktop (siehe Screenshot). Die Ausgaben (Uhrzeit/Datum, Systemname, Batteriestatus, Wlan-Info) zeige ich mittels ![]() Geektool führt Kommandozeilenscripte aus und schreibt deren Ausgabe 1:1 auf den Desktop. Nun will ich noch komplexere Ausgaben machen: einzelne Network-Interfaces nur dann anzeigen, wenn sie auch an sind (z.B. iPhone-Bluetooth oder USB-Tethering, USB-Ethernet-Adapter) etc. mit Netwerk-SSID (wenn WLAN) und erhaltener IP-Adresse etc. Die ganzen Infos erhalte ich mittels Kommandozeilentools, aber zum Teil sind dafür mehrere Aufrufe notwendig (z.B. "networksetup -listnetworkserviceorder | grep Device:", und was dann nach Device steht als input für ifconfig nehmen um den Status und die IP-Adressen aus der inet-Zeile ("inet 192.168.178.34 netmask 0xffffff00 broadcast 192.168.178.255") auszulesen). Ich suche nun gute / erprobte Dokumentationen, Cheatsheets oder Tutorials für sed, awk und generell Shell-Scripting auf Unixoiden Betriebssystemen, so dass ich mir die einzelnen Werte aus der Ausgabe eines Kommandos als Input in einen (oder mehrere) Aufrufe anderer Kommandos schieben kann und mir so meine Ausgabe selber zusammenstellen kann. Wer hat hier eine taugliche Linksammlung zu Shellscripting, sed, awk, grep etc.? |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Die ersten beiden habe ich selber (und gelesen):
Ansonsten zu sed: ![]() awk ist zwar mächtig, aber ich benutze es trotzdem höchst selten. Zu Bash gibt es haufenweise Quellen im Netz, aber stell doch einfach mal ein paar konkrete Fragen. Auch wenn ich keinen Mac zur Hand habe, kann man oft schon anhand der Ausgabe und dem Teil den du extrahieren willst Code schreiben ... Nachtrag:
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Ja, es ist bash. Das Tool 'ip' habe ich hier auf OSX Snow Leopard aber nicht.
Ich habe z.B. folgende Ausgaben:
Code:
Das heisst hiermit kann ich ermitteln, ob das WLAN an ist, wenn ja wie die SSID ist und die aktuelle Geschwindigkeit (lastTxRate) und die Empfangsqualität (agrCtlRSSI) in Db.
Last login: Thu Dec 30 22:58:25 on ttys001
smartair:~ Sebastian$ airport -I AirPort: Off smartair:~ Sebastian$ networksetup -setairportpower en0 on smartair:~ Sebastian$ airport -I agrCtlRSSI: -59 agrExtRSSI: 0 agrCtlNoise: -95 agrExtNoise: 0 state: running op mode: station lastTxRate: 130 maxRate: 144 lastAssocStatus: 0 802.11 auth: open link auth: wpa2-psk BSSID: 0:24:fe:44:d0:7b SSID: smartNet MCS: 15 channel: 1 smartair:~ Sebastian$ Welche Geräte welchen sprechenden Namen haben sehe ich hier:
Code:
Wie man sieht reicht die untere Ausgabe um den sprechenden Namen und den Interface-Namen zu ermitteln.
smartair:~ Sebastian$ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled. (1) Bluetooth DUN (Hardware Port: Bluetooth DUN, Device: Bluetooth-Modem) (2) USB Ethernet (Hardware Port: USB-Ethernet, Device: en3) (3) AirPort (Hardware Port: AirPort, Device: en0) (4) iPhone (Hardware Port: iPhone-USB, Device: en2) (5) Bluetooth PAN (Hardware Port: Bluetooth PAN, Device: en1) smartair:~ Sebastian$ networksetup -listnetworkserviceorder | grep Device (Hardware Port: Bluetooth DUN, Device: Bluetooth-Modem) (Hardware Port: USB-Ethernet, Device: en3) (Hardware Port: AirPort, Device: en0) (Hardware Port: iPhone-USB, Device: en2) (Hardware Port: Bluetooth PAN, Device: en1) smartair:~ Sebastian$ Hier muss ich dann mit einem folgenden ifconfig die Status ermitteln:
Code:
Wie man sieht ist mein iPhone weder per Bluetooth PAN (en1 - inactive) noch per USB (en2) verbunden, noch ist der externe USB-Ethernet-Adapter (en3) angeschlossen. Hier sollte also jedes mal 'not connected' stehen. Wenn connected (so wie das WLAN en0), so soll die aktuelle IPv4 Adresse, die Geschwindigkeit (sofern ermittelbar) und bei Wifi eben noch die SSID angezeigt werden.
smartair:~ Sebastian$ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 10:93:e9:00:ca:1a inet6 fe80::1293:e9ff:fe00:ca1a%en0 prefixlen 64 scopeid 0x4 inet 192.168.178.34 netmask 0xffffff00 broadcast 192.168.178.255 media: autoselect status: active smartair:~ Sebastian$ ifconfig en1 en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 10:93:e9:00:ca:1b media: autoselect status: inactive smartair:~ Sebastian$ ifconfig en2 ifconfig: interface en2 does not exist smartair:~ Sebastian$ ifconfig en3 ifconfig: interface en3 does not exist smartair:~ Sebastian$ Dazu gibt es dann noch die Liste der aktuell verfügbaren WLAN's, von denen mir die SSID reichen würde, die Signalstärke (RSSI) wäre aber auch cool und ggf. die Security (wobei hier secured bzw. offen reichen würde):
Code:
Ich bin im Text parsen noch nicht so bewandert, deswegen weiss ich gar nicht, welche Tools hier die besten sind um die entsprechenden Stellen sauber zu extrahieren.
smartair:~ Sebastian$ airport -s
SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group) WLAN-3C0C43 88:25:2c:3c:0c:c9 -89 6,-1 Y DE WPA(PSK/TKIP,AES/TKIP) WPA2(PSK/TKIP,AES/TKIP) smartNet Office 06:24:fe:b6:a6:7a -51 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartNet Studio 06:24:fe:b2:8e:57 -68 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartNet Gast WLAN 06:24:fe:44:d0:7b -48 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartNet 00:24:fe:44:d0:7b -47 1,+1 Y -- WPA(PSK/TKIP/TKIP) WPA2(PSK/AES/TKIP) smartair:~ Sebastian$ |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Ich gucke es mir später genauer an. Muß erst noch ein paar Dinge erledigen.
|
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Ich bin bei der Tutorialsuche zum Schnuppern
![]() |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
oder das hier:
![]() Bernhard ADD: Ansonsten kann ich die MAN-Pages nur empfehlen ("man sed" in der Konsole auf Linux, Mac?) ADD2: "info sed" ist sogar noch ausführlicher. |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Also, der Mac mini in der Firma über VPN hat einige dieser Tools nicht, also werde ich stattdessen deine Ausgaben übernehmen und cat benutzen.
So, noch ein kleiner Kommentar: Zitat:
Einerlei. Ich schau jetzt mal rein. |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Zitat:
Code:
In beiden Fällen null.
smartair:~ Sebastian$ airport -I
agrCtlRSSI: -60 agrExtRSSI: 0 agrCtlNoise: -94 agrExtNoise: 0 state: running op mode: station lastTxRate: 130 maxRate: 144 lastAssocStatus: 0 802.11 auth: open link auth: wpa2-psk BSSID: 0:24:fe:44:d0:7b SSID: smartNet MCS: 15 channel: 1 smartair:~ Sebastian$ echo $? 0 smartair:~ Sebastian$ airport -I AirPort: Off smartair:~ Sebastian$ echo $? 0 |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Unter diversen *nixen kann man auch in /proc/ haufenweise Infos finden, aber das scheint's bei unserm Mac mini zumindest nicht zu geben.
Hier ein paar nützliche Grundlagen vor dem Lesen eines Bash-Skriptes (Wildcards in "pattern" ist jeweils erlaubt):
Code:
Alle TODO beachten!
#!/usr/bin/env bash
# TODO: Austauschen gegen networksetup -listnetworkserviceorder LISTSERVICES="cat networksetup-listnetworkserviceorder.txt" # TODO: Austauschen gegen airport -I AIRPORTI="cat airport-I.txt" AIRPORTI="cat airport-I-off.txt" # Ermitteln ob WLAN aktiv WLANACTIVE=1 ($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0 # Entsprechend 'schöne' Ausgaben erzeugen if (( WLANACTIVE )); then echo "WLAN ist aktiv" $AIRPORTI|while read line; do case "$line" in agrCtlRSSI:*) # Ausgabe kannste hier anpassen echo "Empfangsqualität: ${line##*: } dB" ;; lastTxRate:*) # ... und hier echo "Aktuelle Geschwindigkeit: ${line##*: }" ;; *) ;; esac done else echo "WLAN ist nicht aktiv" fi # Geräte ermitteln # ... unnötige Teile herausschneiden. $LISTSERVICES|sed '/Device:/!d; s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/\1:\2/i;'|while read device; do # Wichtige Teile extrahieren (Format pro Zeile ist <name>:<interface>) NAME=${device%%:*} IFACE=${device##*:} case "$IFACE" in en*) echo "$IFACE" # TODO: hier muß erweitert werden ;; *) ;; esac done Bei den Interfaces wird es schwer ohne die genauen Ausgaben oder Exitcodes der verschiedenen Fälle zu kennen. Aber ich denke das gibt dir zumindest einen Ansatz. Wir können es ja noch ausbauen wenn du mir noch ein paar Informationsbrocken zukommen läßt. In jedem Fall würde ich dir empfehlen die Rohdaten in eine Datei zu schreiben und diese nur zu aktualisieren wenn x Sekunden vergangen sind. Denn ansonsten haste soviele Aufrufe in einem Skript welches eigentlich nur im Hintergrund laufen soll, daß es einfach nicht mehr feierlich wäre. |
AW: Gute Tutorials / Beispiele zu sed und awk gesucht
Cool, Danke! Ich denke ich werde mir das morgen früh im Zug mal im Detail ansehen und schauen dass ich da was gescheites mit hinbekomme :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz