Regex Wizards

grarpamp grarpamp at
Tue Sep 27 02:34:18 UTC 2011

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'

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?

More information about the freebsd-questions mailing list