• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

grep spinnt!?

Mitglied seit
04.08.2002
Beiträge
1.869
Reaktionen
0
Moin.

Ich hätte da mal eine Frage zu grep: Bisher hat das Programm immer wunderbar funktioniert, aber seit gestern scheint es irgendwie zu spinnen.

Folgendes Problem:

Ich gebe auf der Kommandozeile

ifconfig |grep 172.16.1.2

ein und erhalte als Ausgabe:

inet Adresse:172.16.182.1 Bcast:172.16.182.255 Maske:255.255.255.0

also einen String, wo die gesuchte IP 172.16.1.2 überhaupt nicht vorkommt (nur der Anfang 172.16.1 kommt in 172.16.182.1 vor!).

Wenn ich statt dessen den Parameter -o verwende (der mir nur das Vorkommen des gesuchten Wortes, in dem Fall also die IP 172.16.1.2 ausgeben sollte), also

ifconfig |grep -o 172.16.1.2

bekomme ich als Ausgabe folgendes:

172.16.182
172.16.182


Also vielleicht mache ich da ja gerade auch irgendwie etwas gravierend falsch und habe die Funktionsweise von grep nicht verstanden, aber diese Anweisung steht in einem bash-Script drin, was ich mal geschrieben habe, und es hat bisher immer sauber funktioniert und seit gestern spuckt grep halt irgendeinen Dreck aus.

Hat da vielleicht jemand eine Idee oder einen Tipp für mich?

thx
m.a.k.

P.S.: Ich nutze Kubuntu 7.10 als Distro.
 

The_Company

Guest
grep sucht regexps, nicht text. Une bei Regexps sind einige Zeichen speziell. Das Punkt-Zeichen steht zB fuer "irgendein Zeichen", also wie das ? bei Dateinamen. Wenn man irgend eines von den speziellen Zeichen genau gematcht haben will, dann muss man es "escapen", indem man einen Backslash davor macht.
Ergo musst Du, wenn Du die IP 172.16.1.2 matchen willst, grep 172\.16\.1\.2 eingeben.
 

Aule2

Guest
bzw einfach bei diesen ganzen Dingen angewöhnen immer " " zu verwenden ;)
 
Mitglied seit
04.08.2002
Beiträge
1.869
Reaktionen
0
thx für die schnellen antworten, wenn ich den string entsprechend maskiere, dann klappt es sauber...

allerdings bin ich trotzdem verwundert, da ich dachte, dass das von euch beschriebene verhalten gerade nicht bei grep sondern bei egrep auftritt, also das grep wirklich nach strings sucht...
zumal das skript bisher immer funktioniert hat und ich an meiner netzwerk-config nix geändert habe...

aber naja.. anyway.. hauptsache es funktioniert :top2:
 

killerchicken_inaktiv

Guest
Das Script hat jetzt halt "zufällig" angeschlagen, weil die IP gerade auf das Muster passt:

172.16.182.1
172?16?1?2

Ich habe mal Fragezeichen überall dort eingefügt, wo etwas gematcht (arg, geiles denglish) wird. Hast du eine andere IP, zB

172.16.184.1

wird sie wie erwartet nicht gematcht, weil keine "2" ein Zeichen nach der "1" kommt.
 
Mitglied seit
09.11.2002
Beiträge
880
Reaktionen
0
Ich meine mal gelesen zu haben, daß bei vielen Distris grep nur noch ein link auf egrep ist. Und Deine Erfahrung scheint das ja zu bestätigen.
 

The_Company

Guest
Original geschrieben von Aule2
bzw einfach bei diesen ganzen Dingen angewöhnen immer " " zu verwenden ;)
Nee, denn auch mit quotes wird der Punkt als Punkt interpretiert und matcht jedes Zeichen. Die backslashes sind in diesem Fall nicht fuer die Shell gedacht, sonder fuer das grep Programm, ergo braucht man auch keine QUotes fuer die Shell.
 
Oben