busybox - grep

astrapi

Mitglied
Mitglied seit
27 Mai 2005
Beiträge
341
Punkte für Reaktionen
0
Punkte
0
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:
grep
grep [-HhrilLnqvsoweFEABC] PATTERN [FILEs...] Search for PATTERN in each FILE or standard input
Options:
-H Prefix output lines with filename where match was found
-h Suppress the prefixing filename on output
-r Recurse subdirectories
-i Ignore case distinctions
-l List names of files that match
-L List names of files that do not match
-n Print line number with output lines
-q Quiet. Return 0 if PATTERN is found, 1 otherwise
-v Select non-matching lines
-s Suppress file open/read error messages
-c Only print count of matching lines
-o Show only the part of a line that matches PATTERN
-m MAX Match up to MAX times per file
-w Match whole words only
-F PATTERN is a set of newline-separated strings
-E PATTERN is an extended regular expression
-e PTRN Pattern to match
-f FILE Read pattern from file
-A Print NUM lines of trailing context
-B Print NUM lines of leading context
-C Print NUM lines of output context
freetz:
grep --help
BusyBox v1.11.3 (2008-10-07 20:03:50 CEST) multi-call binary

Usage: grep [-HhrilLnqvsoeFEABC] PATTERN [FILEs...]

Search for PATTERN in each FILE or standard input

Options:
-H Prefix output lines with filename where match was found
-h Suppress the prefixing filename on output
-r Recurse subdirectories
-i Ignore case distinctions
-l List names of files that match
-L List names of files that do not match
-n Print line number with output lines
-q Quiet. Return 0 if PATTERN is found, 1 otherwise
-v Select non-matching lines
-s Suppress file open/read error messages
-c Only print count of matching lines
-o Show only the part of a line that matches PATTERN
-m MAX Match up to MAX times per file
-F PATTERN is a set of newline-separated strings
-E PATTERN is an extended regular expression
-e PTRN Pattern to match
-f FILE Read pattern from file
-A Print NUM lines of trailing context
-B Print NUM lines of leading context
-C Print NUM lines of output context
Jemand ne idee, wie man die Option "w" ersetzen kann, oder wie man sie in die freetz-version einbaut?
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
0
Punkte
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.
 

Miyamoto

Neuer User
Mitglied seit
11 Nov 2006
Beiträge
121
Punkte für Reaktionen
0
Punkte
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
 

astrapi

Mitglied
Mitglied seit
27 Mai 2005
Beiträge
341
Punkte für Reaktionen
0
Punkte
0
ü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
 

Silent-Tears

IPPF-Promi
Mitglied seit
3 Aug 2007
Beiträge
7,456
Punkte für Reaktionen
0
Punkte
0
Benötigst du in diesem Falle aber nicht zwangsläufig, oder?
 

astrapi

Mitglied
Mitglied seit
27 Mai 2005
Beiträge
341
Punkte für Reaktionen
0
Punkte
0
leider schon, ansonsten wird z.B. localhost mit angezeigt. habe bisher noch keine andere lösung gefunden...
 

Silent-Tears

IPPF-Promi
Mitglied seit
3 Aug 2007
Beiträge
7,456
Punkte für Reaktionen
0
Punkte
0
Ein simples "grep -v localhost" hilft dann auch ;)
 

McNetic

Mitglied
Mitglied seit
7 Feb 2007
Beiträge
674
Punkte für Reaktionen
0
Punkte
16
Das Ganze geht sicher auch mit sed oder awk, wenn die Busybox kein optionales -w für grep hat.
 

astrapi

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

McNetic

Mitglied
Mitglied seit
7 Feb 2007
Beiträge
674
Punkte für Reaktionen
0
Punkte
16
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
 

astrapi

Mitglied
Mitglied seit
27 Mai 2005
Beiträge
341
Punkte für Reaktionen
0
Punkte
0
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.
 

McNetic

Mitglied
Mitglied seit
7 Feb 2007
Beiträge
674
Punkte für Reaktionen
0
Punkte
16
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?
 

astrapi

Mitglied
Mitglied seit
27 Mai 2005
Beiträge
341
Punkte für Reaktionen
0
Punkte
0
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
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
0
Punkte
36
ich will aus der datei exhost nur die zeilen rausfiltern, die einen eintrag in der datei wols haben.
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
 

McNetic

Mitglied
Mitglied seit
7 Feb 2007
Beiträge
674
Punkte für Reaktionen
0
Punkte
16
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.
 

astrapi

Mitglied
Mitglied seit
27 Mai 2005
Beiträge
341
Punkte für Reaktionen
0
Punkte
0
grep -f liefert mir aber direkt die zeilen, ich möchte ja aber mit den zeilen weiterarbeiten ...
 

McNetic

Mitglied
Mitglied seit
7 Feb 2007
Beiträge
674
Punkte für Reaktionen
0
Punkte
16
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 }'
 

3CX PBX - GRATIS
Linux / Win / Cloud

Statistik des Forums

Themen
232,352
Beiträge
2,021,459
Mitglieder
349,910
Neuestes Mitglied
cart2099