Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Sep 2011 22:02:51 -0400
From:      grarpamp <grarpamp@gmail.com>
To:        freebsd-questions@freebsd.org
Subject:   Regex Wizards
Message-ID:  <CAD2Ti29Uvz6tBp60SYnD-5bJ8Jf=ThbVG5UUU21NWmmqOrO5SA@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Under the ERE implementation in RELENG_8, I'm having
trouble figuring out how to group and backreference this.

Given a line, where:
 If AAA is present, CCC will be too, and B may appear in between.
 If AAA is not present, neither CCC or B will be present.
 DDDD is always present.
 Junk may be present.
 Match good lines and ouput in chunks.

echo junkAAAABCCCDDDDjunk | \

This works as expected:
sed -E -n 's,^.*(AAAB?CCC)(DDDD).*$,1 \1 2 \2,p'
1 AAABCCC 2 DDDD

But making the leading bits optional per spec does not work:
sed -E -n 's,^.*(AAAB?CCC)?(DDDD).*$,1 \1 2 \2,p'
1  2 DDDD

Nor does adding the usual grouping parens:
sed -E -n 's,^.*((AAAB?CCC)?)(DDDD).*$,1 \1 2 \2,p'
1 2

How do I group off the leading bits?
Or is this a limitation of ERE's?
Or a bug?
Thanks.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAD2Ti29Uvz6tBp60SYnD-5bJ8Jf=ThbVG5UUU21NWmmqOrO5SA>