[MEGOLDVA]regexp

hello

van egy nagyon egyszerű dolog amit valahogy nem tudok kicsiholni a regexp-el.
még pedig az hogy legalább 4 de max 5 számot tartalmazó sorokat adja vissza.
én így írtam
cat file|grep '[0-9]\{4,5\}'de ez a forma csak azt hozza ahol 4 vagy több számot tartalmazó sor van, azaz van olyan ahol 12 számot is tartalmaz a sor egymás után.
például:
cat old |grep '[0-9]{4,5}'
#97987654
#3443
Innen vettem a formulát: http://en.wikipedia.org/wiki/Regular_expression
BRE: \{m,n\}
ERE: {m,n} Matches the preceding element at least m and not more than n times. For example, a\{3,5\} matches only "aaa", "aaaa", and "aaaaa". This is not found in a few older instances of regular expressions.

A megoldás:
sed -n -e '/[0-9]\{7,7\}/p'

Hozzászólások

Nem kell bugreport, mert nincs bug. A grep ugye úgy működik, hogy:
1. eldönti, hogy az adott sorra illeszkedik-e a regexp,
2. ha igen, akkor kiírja.

Tehát a regexp, amit írt, azt kérdezi, hogy 12 számjegyben van-e 5 számjegy, és bizony van.

A helyes regexp:
grep -P "(^|[\D])[\d]{4,5}([\D]|$)" file

(^|[\D])  sor eleje, vagy nem számjegy karakter
[\d]{4,5} adott hosszúságú, számjegyekből álló string
([\D]|$)  sor vége, vagy nem számjegy karakter

Szerk: Bocs, most látom, hogy efel és nagysa már leírta ugyanezt.

grep-pel: cat file | grep -E '(^|[^0-9])[0-9]{4,5}($|[^0-9])'

Esetleg a grep -w is jó ötlet lehet, ha a fájl "szerkezete" olyan, tehát nem szerepel benne pl. 1234ab karaktersorozat.