[linux-l] Re: Regex Frage
Mike Dornberger
Mike.Dornberger at gmx.de
Fr Feb 17 21:30:04 CET 2006
Hi,
On Fri, Feb 17, 2006 at 06:27:37PM +0100, JSC wrote:
> On Fri, Feb 17, 2006 at 04:50:24PM +0100, Rocco Rutte wrote:
> > * JSC <belug at jsc.no-ip.org>:
> >
> > >ich krieg hier noch nen knoten in den kopf. ich brauche EINE regular
> > >expression, die "def" findet, aber nicht "abcdef".
> >
> > >geht sowas? kann jemand ein beispiel geben, wie das pattern als regex
> > >und extended regex aussieht?
> >
> > Etwas explizit _nicht_ zu matchen ist relativ kompliziert.
> >
> > Wenn in jeder Zeile vor dem Match auf 'def' mindestens noch 3 Zeichen
> > stehen:
> >
> > '[^a][^b][^c]def'
> >
> funktioniert ja nicht, das macht mir ja den knoten in den kopf ...
>
> $ echo 123def | grep '[^a][^b][^c]def'
> 123def
> $ echo 123bcdef | grep '[^a][^b][^c]def'
> $
nun, ließ genau, was da steht:
!a AND !b AND !c AND (def) = !(a OR b OR c) AND def (jeweils an den
entsrechenden Stellen)
(siehe auch
$ perl -e '@z = ("a", "b", "c"); for $x (1..2**3) { for $y (0 .. 2) { if ($x
& 2**$y) {print $z[$y]} else {print "_";} }; print "def\n"; }' | grep
'[^a][^b][^c]def' )
also entweder
$ echo 123bcdef | grep
'\([^a]bc\|a[^b]c\|[^a][^b]c\|ab[^c]\|[^a]b[^c]\|a[^b][^c]\|[^a][^b][^c]\)def'
... was natürlich beliebig unübersichtlich wird, wenn du auf (nicht
abcdefg...)DEF matchen willst. Da baust du dir dann am besten ein Script,
was dir die regex schreibt
oder du machst einfach
$ echo 123bcdef | grep -v 'abcdef' | grep def
Gruß,
Mike
Mehr Informationen über die Mailingliste linux-l