grep regexp kérdés

Adva vagyon egy auth.log részlet. A feladat szemszögéből csak a sorok eleje érdekes. Mindegyik sor hasonlóan kezdődik

Apr 13 19:19:07

Egy olyan grep, egrep alapú regexpre lenne szükségem amely azokat a sorokat írja ki ahol az óra és a perc értéke azonos. Lásd a fenti példa.

Józan ésszel csináltam egy ilyet.

egrep "(0[0-9]:|1[0-9]:|2[0-9]:){2}.." auth.log

De ez mégsem azt teszi amit várnék tőle. Jól tudom, hogy a zárójelek közt a | jel VAGY kapcsolatot jelent?

Ha csak simán így írom be, akkor működik, csak értelemszerűen kevés a találat.

egrep "(0[0-9]:){2}.." auth.log

Ronda workaroundot (2 for ciklusban 1 egrep) tudok rá, de az nem megoldás!

Valakinek van javaslata, ötlete?

Hozzászólások

Eléggé iskolai feladatnak tűnik, úgyhogy nem írom le egyben a teljes megoldást, de az alábbiak alapján nem bonyolult.

man grep:
"Back References and Subexpressions
The back-reference \n, where n is a single digit, matches the substring previously matched by the nth parenthesized subexpression of the regular expression."

A kétjegyű számot jól leírja a [0-9]{2} kifejezés. Ezt a fenti alapján zárójelbe kell tenni, és a második esetben hivatkozni a fent említett módon az első találatra, a harmadik szintén egy kétjegyű számot leíró regexp, közöttük kettősponttal.

Még annyi észrevétel, hogy ez jelenleg nem kizárólag a bejegyzés idejére illeszkedhet. A logsor tényleges adatrészében lényegében bármilyen szöveg megjelenhet, ami szerencsétlen esetben illeszkedhet a mostani "két szám, kettőspont, két szám, kettőspont, két akármi" mintára. (Az auth.log esetében tipikusan ilyen lehet egy kulcs fingerprintje.) Ezért érdemes lenne a sor kezdetéhez kötni a fenti mintát. A végéről pedig a ".." el is hagyható.