.titleBar { margin-bottom: 5px!important; }

busybox - grep

Dieses Thema im Forum "Freetz" wurde erstellt von astrapi, 15 Okt. 2008.

  1. astrapi

    astrapi Mitglied

    Registriert seit:
    27 Mai 2005
    Beiträge:
    341
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Chemnitz
    Hallo,

    ich benötige für meine Anpassung des WOL Scriptes die Option "w" von grep, leider ist diese bei der busybox von freetz nicht dabei.

    laut Hersteller:
    freetz:
    Jemand ne idee, wie man die Option "w" ersetzen kann, oder wie man sie in die freetz-version einbaut?
     
  2. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Die Quelltexte der Busybox sind jedem zugänglich.

    Wenn sich der andere Teil der Frage auf eine alternative Lösung bezog, wäre es hilfreich, wenn Du genauer schreiben würdest, was Du machen willst.
     
  3. Miyamoto

    Miyamoto Neuer User

    Registriert seit:
    11 Nov. 2006
    Beiträge:
    121
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Code:
    make busybox-menuconfig
    Dann müßtest Du an alle Optionen rankommen. Hab damit schon länger immer noch ein paar Kommandos mit reingenommen.

    HTH
     
  4. astrapi

    astrapi Mitglied

    Registriert seit:
    27 Mai 2005
    Beiträge:
    341
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Chemnitz
    über "make busybox-menuconfig" kommt man nicht ran.

    ich möchte den Inhalt der Variablen $host mit dem Inhalt der Datei der "wols" vergleichen, der Parameter -w hilft dabei nach ganzen Wörtern zu suchen


    Inhalt von wols:
    Code:
    astrapi-pc08
    astrapi-pc20
    astrapi-vm
    
    mein Code:
    Code:
    if ! grep -q -w "$host" /tmp/flash/wols; then
      continue
    fi
    
     
  5. Silent-Tears

    Silent-Tears IPPF-Promi

    Registriert seit:
    3 Aug. 2007
    Beiträge:
    7,456
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    BI
    Benötigst du in diesem Falle aber nicht zwangsläufig, oder?
     
  6. astrapi

    astrapi Mitglied

    Registriert seit:
    27 Mai 2005
    Beiträge:
    341
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Chemnitz
    leider schon, ansonsten wird z.B. localhost mit angezeigt. habe bisher noch keine andere lösung gefunden...
     
  7. Silent-Tears

    Silent-Tears IPPF-Promi

    Registriert seit:
    3 Aug. 2007
    Beiträge:
    7,456
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    BI
    Ein simples "grep -v localhost" hilft dann auch ;)
     
  8. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    674
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Das Ganze geht sicher auch mit sed oder awk, wenn die Busybox kein optionales -w für grep hat.
     
  9. astrapi

    astrapi Mitglied

    Registriert seit:
    27 Mai 2005
    Beiträge:
    341
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Chemnitz
    und wie bau ich das in ... ein?
    Code:
    if ! grep -q -w "$host" /tmp/flash/wols; then
      continue
    fi
    
     
  10. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    674
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Ich bin nicht ganz sicher, was überhaupt das Problem ist, aber mir ist noch was eingefallen:
    Code:
    grep -w "wort"
    sollte ziemlich genau nachgebildet sein durch
    Code:
    egrep "(^|[[:space:]])wort([[:space:]]|$)"
    Gruß, Nico
     
  11. astrapi

    astrapi Mitglied

    Registriert seit:
    27 Mai 2005
    Beiträge:
    341
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Chemnitz
    also, ein grep -q "$host" wols, liefert mir auch einträge aus der exhosts, bei denen kein hostname angegeben ist bzw wo der hostname an anderer stelle steh (localhost, fritz.box.nfs). "if [ -n "$host" ]; then" filtert mir die einträge leider auch nicht raus. die option w hat den erfolg gebracht.

    ich such nach einer möglichkeit rauszufinden ob $host leer bzw null ist.
     
  12. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    674
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Ich versteh es gar nicht.
    Ob die Variable $host leer ist, kannst Du mittels [ -z "$host" ] überprüfen. Das hat aber überhaupt nix mit grep o.ä. zu tun.
    Was hast Du denn für einen Inhalt in der Variable $host, und was genau willst Du dann testen?
     
  13. astrapi

    astrapi Mitglied

    Registriert seit:
    27 Mai 2005
    Beiträge:
    341
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Chemnitz
    ich will aus der datei exhost nur die zeilen rausfiltern, die einen eintrag in der datei wols haben.

    exhosts
    Code:
    127.0.0.1        localhost
    192.168.178.2   fritz.box.nfs
    
    192.168.111.99 * * rechner1
    wols
    Code:
    rechner1
    mit:
    Code:
    egrep -v '^(#|[[:space:]]*$)' exhosts |
      while read -r ip mac interface host desc; do
        if ! grep -q -w "$host" wols; then
          if [[ -n "$host" ]]; then
            continue
          fi
        fi
    echo "$host|$mac|$ip"
    done
    bekomme ich auch localhost und fritz.box.nfs angezeigt
     
  14. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,924
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Wieso nutzt du denn dann nicht "grep -f"? Also (mit deinem Beispiel)
    Code:
    /var/tmp # grep -f wols exhosts
    192.168.111.99 * * rechner1
    /var/tmp #
    
    Jörg
     
  15. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    674
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Ja, das grundlegende Mißverständnis hier ist die Funktionsweise von grep; grep sucht nach Zeilen, welche ein Muster beinhalten. Die Option -w führt lediglich dazu, daß das Muster nur dann gefunden wird, wenn es ein separates Wort innerhalb der Zeile ist; sie ändert nichts daran, daß wie immer bei grep die komplette Zeile, die die Fundstelle enthält, gefunden wird.
    Die Lösung von MaxMuster ist natürlich die einfachste für Dein Problem.
     
  16. astrapi

    astrapi Mitglied

    Registriert seit:
    27 Mai 2005
    Beiträge:
    341
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Chemnitz
    grep -f liefert mir aber direkt die zeilen, ich möchte ja aber mit den zeilen weiterarbeiten ...
     
  17. McNetic

    McNetic Mitglied

    Registriert seit:
    7 Feb. 2007
    Beiträge:
    674
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ort:
    Aachen
    Du willst die Ausgabe haben, die die letzte Zeile Deines Scripts Dir dann entsprechend liefert? Dazu musst Du jetzt auf das Ergebnis das grep -f eine Transformation anwenden. Dazu ist awk gut geeignet:
    Code:
    grep -f wols exhosts | awk '{ printf "%s|%s|%s\n",$4,$2,$1 }'