Stehe ich auf dem Schlauch, oder sehe ich es richtig, dass dies gar nichts mit der Bash zu tun hat, sondern ausschliesslich mit awk?
Also, schauen wir mal genauer hin: Awk wird bei Debian ueblicherweise durch GNU awk (gawk) oder durch mawk bereit gestellt. Die Manpage meines mawk sagt:
AWK uses extended regular expressions as with egrep(1). The regular
expression metacharacters, i.e., those with special meaning in regular
expressions are
^ $ . [ ] | ( ) * + ?
Da sind keine geschweiften Klammern und damit keine Interval-Angaben darunter.
Zur grundsaetzlichen Angabe bei awk: Bei Extended Regexps wie in awk werden escapte Zeichen (also wenn man einen Backslash davor macht) immer literal genommen. Die Sonderbedeutung gilt nur fuer die unescapte Form. (Das ist gegensaetzlich zu ed oder sed. Dort sind es aber auch Basic Regexps.)
So, dann ein Blick in POSIX:
http://pubs.opengroup.org/onlinepubs/96 ... s/awk.html
Dort heisst es:
The awk utility shall make use of the extended regular expression notation [...]
Und unter EREs (
http://pubs.opengroup.org/onlinepubs/96 ... #tag_09_04) steht:
When an ERE matching a single character or an ERE enclosed in parentheses is followed by an interval expression of the format "{m}", "{m,}", or "{m,n}", together with that interval expression it shall match what repeated consecutive occurrences of the ERE would match.
Laut POSIX sollte es also tun; mawk unterstuetzt es aber nicht. Wo liegt die Erklaerung?
Sie findet sich ebenfalls in POSIX, in der Seite von awk, wenn man nach ``interval'' sucht:
Regular expressions in awk have been extended somewhat from historical implementations to make them a pure superset of extended regular expressions, as defined by POSIX.1-2008 (see XBD Extended Regular Expressions). The main extensions are internationalization features and interval expressions.
Aufgrund der historischen Vorgeschichte hat mawk also keine Interval-Ausdruecke.
Es gibt nun drei Loesungsansaetze:
a) Installiere gawk, denn das unterstuetzt die, wie aus seiner Manpage zu entnehmen ist:
-r
--re-interval
Enable the use of interval expressions in regular
expression matching (see Regular Expressions,
below). Interval expressions were not tradition‐
ally available in the AWK language. The POSIX
standard added them, to make awk and egrep consis‐
tent with each other. They are enabled by
default, but this option remains for use with
--traditional.
b) Schreibe die Regexp um, z.B. in: /^\.\.?\/?$/ . Das hat zugleich den Vorteil, dass das auch funktioniert, wenn man `ls -laF' verwendet. (Btw: Wenn nur ein einziges Zeichen vor den Quantifier steht, dann brauchst du keine runden Klammern. Der Backslash-Escape gehoert zum Zeichen.)
c) Umgehe das Problem, z.B. mit: