2012-04-05 12 views
0

Ich versuche, für jeden String grep, die die folgenden Spiele:GNU regex in grep verschiedenen Arbeits auf RedHat vs Windows-

AAA-### 

Wo ein jeder Alpha-Zeichen, und es kann von 2 bis 5 von ihnen sein .

# ist eine Ziffer, und es könnte 1 oder mehr von ihnen geben.

die folgenden Zeichenfolgen sollten also finden:

ABC-123 
DE-4 
FGHI-56789 

Aber diese nicht gefunden werden sollte:

A15-B432 

ich ein paar verschiedene Dinge ausprobiert, wie folgt aus:

grep [[:alpha:]]\{2,5\}-[[:digit:]]\+ 

Das hat jedoch nicht funktioniert.

Dies ist Gnu Grep auf redhat. In meinem Test, mit Grep auf meiner Windows-Maschine, die auch Gnu Grep verwendet, funktionierte dies. Beide scheinen Version 2.5.1 zu sein.

Antwort

2

Sie benötigen die -E Flag für erweiterte reguläre Ausdrücke eingeschlossen haben:

$ cat file 
ABC-123 
DE-4 
FGHI-56789 
A15-B432 
$ grep [[:alpha:]]\{2,5\}-[[:digit:]]\+ file 
$ grep -E [[:alpha:]]\{2,5\}-[[:digit:]]\+ file 
ABC-123 
DE-4 
FGHI-56789 

Ich persönlich bevorzuge es, '' zu verwenden, um alle \ Zeichen zu vermeiden:

$ grep -E '[[:alpha:]]{2,5}-[[:digit:]]+' file 
ABC-123 
DE-4 
FGHI-56789 
+0

Ihre beiden Beispiele funktionierten perfekt. – jgritty

+0

Kein Problem - normalerweise gibt es einen 'egrep' Befehl, der mit 'grep -E' identisch ist. –

0

Wissen Sie, welcher Teil nicht funktioniert?

Ist es die [:alpha:] und [:digit:] oder \{2,5\} oder einfach nur die Tatsache, dass Sie nicht den regulären Ausdruck in Anführungszeichen

grep '[[:alpha:]]\{2,5\}-[[:digit:]]\+'?