Mit grep Zahlen mit einer festgelegten Anzahl Ziffern suchen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Maverick
Beiträge: 18
Registriert: 25.02.2003 20:00:50
Wohnort: Viersen

Mit grep Zahlen mit einer festgelegten Anzahl Ziffern suchen

Beitrag von Maverick » 05.10.2005 22:57:38

Ich möchte mir gerne aus einer Datei (Beispiel testfile) alle Zeilen anzeigen lassen in denen Zahlen mit einer Länge von genau zwei Ziffern vorkommen.

Weder der Aufruf von

Code: Alles auswählen

grep '[0-9]\{2\}' file
unter Debian Sarge, noch der Aufruf mit den -E, -G oder -e führen zu dem gewünschten Ergebnis.

Angezeigt werden stattdessen alle Zeilen die Zahlen mit mindestens zwei Ziffern enthalten.

Hat jemand eine Idee was ich hier falsch mache? Laut regular expressions müsste dieser Aufruf doch korrekt sein, oder? auch

Code: Alles auswählen

\{2,3\}
zum Auffinden von zwei und dreiziffrigen Zahlen funktioniert nicht.

Benutzeravatar
Snoopy
Beiträge: 4297
Registriert: 17.11.2003 18:26:56
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rh.- Pflz.

Beitrag von Snoopy » 06.10.2005 03:06:45

Hi

Probiers mal mit einem

Code: Alles auswählen

grep -x '[0-9]\{2\}' testfile
;)

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 06.10.2005 07:03:07

Hallo Maverick,
soweit ich das verstehe, müsstest Du von den 2 Ziffern, Ziffern direkt davor oder/und danach ausschließen.

...möglicherweise umständlich und unvollständig :wink:

Code: Alles auswählen

grep -E "^[0-9]{2} |^[0-9]{2}$| [0-9]{2} | [0-9]{2}$" testfile
...willst Du auch abc01 etc. mit einschließen, wird es noch etwas komplizierter :wink:

Gruß fuzzy

Nicolas
Beiträge: 28
Registriert: 12.10.2003 14:32:47

Beitrag von Nicolas » 06.10.2005 13:08:36

Code: Alles auswählen

egrep "(^|[^0-9])[0-9]{2}([^0-9]|$)" testdatei
trifft auf alle Zeilen zu in denen mindestens einmal genau zwei zusammenhängene Ziffern auftreten. Also zwei Ziffern aus [0-9] die umgeben sind von nicht Ziffern oder Zeilenanfang/Zeilenende

Maverick
Beiträge: 18
Registriert: 25.02.2003 20:00:50
Wohnort: Viersen

Beitrag von Maverick » 06.10.2005 13:35:57

Vielen Dank für die Lösungsvorschläge.

Letztlich hat die Lösung von fuzzy funktioniert:

Code: Alles auswählen

grep -E "^[0-9]{2} |^[0-9]{2}$| [0-9]{2} | [0-9]{2}$" testfile
Aber inzwischen habe ich auch rausgefunden das es auch einfache geht:

Code: Alles auswählen

grep -w '[0-9]\{2\}' testfile
Mit dem Schalter -w sucht grep nach ganzen Wörtern also in diesem Fall auch nach Zahlen.

Viele Grüße

Maverick

Antworten