AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Gute Tutorials / Beispiele zu sed und awk gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

Gute Tutorials / Beispiele zu sed und awk gesucht

Ein Thema von Phoenix · begonnen am 31. Dez 2010 · letzter Beitrag vom 6. Jan 2011
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#1

AW: Gute Tutorials / Beispiele zu sed und awk gesucht

  Alt 3. Jan 2011, 21:34
Habs. Im Moment siehts so aus:

Code:
#!/usr/bin/env bash
LISTSERVICES="networksetup -listnetworkserviceorder"
AIRPORTI="airport -I"

# Ermitteln ob WLAN aktiv
WLANACTIVE=1
($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0

# Entsprechend 'schöne' Ausgaben erzeugen
if (( WLANACTIVE )); then
     $AIRPORTI|{
   while read line; do
          case "$line" in
             agrCtlRSSI:*)
            QUALITY=${line##*: }
               ;;
             lastTxRate:*)
            SPEED=${line##*: }
               ;;
             SSID:*)
            SSID=${line##*: }
            
               ;;
         channel:*)
            CHANNEL=${line##*: }
         ;;    
             *)
               ;;
          esac
    done

   if [ "$SSID" = "SSID:" ]; then
      echo "WIFI:       enabled (not connected)"
   else
      echo "WIFI:       enabled"
      echo "Network:    $SSID"
      echo "Speed:      $SPEED Mbit/s"
          echo "Quality:    $QUALITY dB"
   fi
   }
else
   echo "WIFI:       disabled"
fi

# make some lines
echo
echo

# Geräte ermitteln
#             ... unnötige Teile herausschneiden.
$LISTSERVICES|sed '/Device:/!d; s/^.*:\s\s*\(.*\),\s\s*Device:\s\s*\(.*\).$/\1:\2/;'|while read device; do
  # Wichtige Teile extrahieren (Format pro Zeile ist <name>:<interface>)
   NAME=${device#*: }
   NAME=${NAME%%,*)}
   IFACE=${device##*: }
    IFACE=${IFACE%%)}
  case "$IFACE" in
  en*)
       echo "Interface: $NAME : $IFACE"
   ifconfig $IFACE
    # TODO: hier muß erweitert werden
    ;;
  *)
    ;;
  esac
done
Die ifconfig $IFACE ausgabe tut auch schon - jetzt muss ich hier nur noch die Ausgabe auseinanderpfriemeln und dann je nach Status (existiert nicht, active, inactive) so wie beim WLAN jetzt die Ausgabe zusammenbauen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#2

AW: Gute Tutorials / Beispiele zu sed und awk gesucht

  Alt 4. Jan 2011, 06:45
Boah ey. Subshells sind ekelhaft Hab noch ein bisschen getweaked damit's einfacher mit den Variablen wird.

Der sed - aufruf für die Geräteliste liefert im übrigen definitiv nicht "Name : deviceName" zurück sondern die Zeile 1:1 wie aus dem original-Aufruf. Da würde auch ein simples 'grep "Device:"' reichen:

Code:
#!/usr/bin/env bash
echo "Network information:"
echo "===================="
LISTSERVICES="networksetup -listnetworkserviceorder"
AIRPORTI="airport -I"

# WIFI
WLANACTIVE=1
($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0

# Entsprechend 'schöne' Ausgaben erzeugen
if (( WLANACTIVE )); then
        while read line; do
          case "$line" in
             agrCtlRSSI:*)
            QUALITY=${line##*: }
               ;;
             lastTxRate:*)
            SPEED=${line##*: }
               ;;
             SSID:*)
            SSID=${line##*: }
            
               ;;
         channel:*)
            CHANNEL=${line##*: }
         ;;    
             *)
               ;;
          esac
    done < <($AIRPORTI)

   if [ "$SSID" = "SSID:" ]; then
      echo "WIFI:       enabled (not connected)"
   else
      echo "WIFI:       enabled"
      echo "Network:    $SSID"
      echo "Speed:      $SPEED Mbit/s"
          echo "Quality:    $QUALITY dB"
   fi
else
   echo "WIFI:       disabled"
fi

# make some lines
echo
echo

# Devices
while read device; do
   # Erst vorne, dann hinten abschneiden, jeweils für Name und Interfacename
   NAME=${device#*: }
   NAME=${NAME%%,*)}
   IFACE=${device##*: }
    IFACE=${IFACE%%)}
    
   case "$IFACE" in
        en*)
             echo "Interface: $NAME : $IFACE"
         ifconfig $IFACE
             # TODO: hier muß erweitert werden
          ;;
        *)
          ;;
     esac
done < <($LISTSERVICES|grep "Device:")
Gibts eigentlich ne Möglichkeit die Ausgabe nach enX zu sortieren und nicht einfach nur Zeilenweise durch den Input durchzuorgeln? (Ich weiss, jetzt wirds unverschämt ).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org

Geändert von Phoenix ( 4. Jan 2011 um 06:46 Uhr) Grund: Ne Klammer vergessen.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#3

AW: Gute Tutorials / Beispiele zu sed und awk gesucht

  Alt 4. Jan 2011, 08:37
Gibts eigentlich ne Möglichkeit die Ausgabe nach enX zu sortieren und nicht einfach nur Zeilenweise durch den Input durchzuorgeln? (Ich weiss, jetzt wirds unverschämt ).
Gibt es, ja. Allerdings wird das schwer so wie es nun aussieht. Vorher hätte man in dem sed-Befehl nur $1 und $2 andersrum ausgeben müssen. Im Grunde mußt du die Liste in einer Variablen einfangen so daß du bspw. (außerdem wäre in diesem Fall das Problem, daß vor dem Ermitteln des Namens des Gerätes der Interfacename ermittelt werden müßte, da ersterer Leerzeichen enthalten kann):

Code:
INTERFACES="en0 en4 en3"
Danach kannste dann bspw. so an die sortierte Liste kommen:

Code:
(for i in $INTERFACES; do echo $i; done)|sort|while ...
Nochmals, würde das alte sed benutzt, wäre dies kein Problem, weil du dann eben die erhaltene Liste einmal durch sort jagen könntest und erst dann ausgeben müßtest (aber eben mit für $1 und $2 getauschten Positionen).
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#4

AW: Gute Tutorials / Beispiele zu sed und awk gesucht

  Alt 4. Jan 2011, 08:59
Das alte sed hat aber wie gesagt zumindest bei mir nicht die gewünschte Ausgabe
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#5

AW: Gute Tutorials / Beispiele zu sed und awk gesucht

  Alt 4. Jan 2011, 10:08
Aaah, gerade auf unserem Mac mini geschaut. Handelt sich also um BSD sed.

Versuch mal:

Code:
sed -E -e '/Device:/!d; s/^\(Hardware Port: *(.*), *Device: *(.*)\)$/\2:\1/'
Bei mir ergibt das:
Code:
Bluetooth-Modem:Bluetooth DUN
en3:USB-Ethernet
en0:AirPort
en2:iPhone-USB
en1:Bluetooth PAN
... welches man durch sort und dann durch ein while read jagen kann ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#6

AW: Gute Tutorials / Beispiele zu sed und awk gesucht

  Alt 4. Jan 2011, 10:58
Dann schau ich mal dass ich das nachher in der Mittagspause zusammenpfriemel. Diese Regex da versteh ich schon längen besser als die davor *g*

Hervorragend, so tut's jetzt
Code:
#!/usr/bin/env bash
echo "Network information:"
echo "===================="
LISTSERVICES="networksetup -listnetworkserviceorder"
AIRPORTI="airport -I"

# Ermitteln ob WLAN aktiv
WLANACTIVE=1
($AIRPORTI|grep -q 'AirPort: Off') && WLANACTIVE=0

# Entsprechend 'schöne' Ausgaben erzeugen
if (( WLANACTIVE )); then
        while read line; do
          case "$line" in
             agrCtlRSSI:*)
            QUALITY=${line##*: }
               ;;
             lastTxRate:*)
            SPEED=${line##*: }
               ;;
             SSID:*)
            SSID=${line##*: }
            
               ;;
         channel:*)
            CHANNEL=${line##*: }
         ;;    
             *)
               ;;
          esac
    done < <($AIRPORTI)

   if [ "$SSID" = "SSID:" ]; then
      echo "WIFI:       enabled (not connected)"
   else
      echo "WIFI:       enabled"
      echo "Network:    $SSID"
      echo "Speed:      $SPEED Mbit/s"
          echo "Quality:    $QUALITY dB"
   fi
else
   echo "WIFI:       disabled"
fi

# make some lines
echo

# Geräte ermitteln
#             ... unnötige Teile herausschneiden.

while read device; do
   #empty line / placeholder
   echo
   IFACE=${device%%:*}
   NAME=${device##*:}

   case "$IFACE" in
        en*)
             echo "Interface: $NAME"
         echo "========================"
         ifconfig $IFACE
             # TODO: hier muß erweitert werden
          ;;
      Bluetooth-Modem*)
         #echo $NAME
      ;;
        *)
          ;;
     esac
done < <($LISTSERVICES|sed -E -e '/Device:/!d; s/^\(Hardware Port: *(.*), *Device: *(.*)\)$/\2:\1/'|sort)
Die Ausgabe bisher:
Code:
smartair:Scripte Sebastian$ ./networkinfo.sh
Network information:
====================
WIFI:       enabled
Network:    SH_SECURED_1OG
Speed:      54 Mbit/s
Quality:    -61 dB



Interface: AirPort
========================
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.2.120 netmask 0xffffff00 broadcast 192.168.2.255
   media: autoselect
   status: active

Interface: Bluetooth PAN
========================
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
   ether 10:93:e9:00:ca:1b
   media: autoselect
   status: inactive

Interface: iPhone-USB
========================
ifconfig: interface en2 does not exist

Interface: USB-Ethernet
========================
ifconfig: interface en3 does not exist
smartair:Scripte Sebastian$
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org

Geändert von Phoenix ( 4. Jan 2011 um 12:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#7

AW: Gute Tutorials / Beispiele zu sed und awk gesucht

  Alt 6. Jan 2011, 19:19
Cool. Wird dann noch was gebraucht?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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