Einfaches Problem mit awk und regex
Frage
echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
Warum kann ich keine Ausgabe bekommen?
Vielen Dank.
Lösung
Sie müssen "Intervallausdrücke" in regelmäßiger Ausdrucksanpassung aktivieren, indem Sie entweder die angeben --posix
oder --re-interval
Möglichkeit.
z.B
echo xx y11y rrr | awk --re-interval '{ if ($2 ~ /y[1-5]{2}y/) print $3}
Aus der Mannseite:
-Re-Interval ermöglichen die Verwendung von Intervallausdrücken in regelmäßiger Expressionsanpassung (siehe reguläre Ausdrücke unten). Intervallausdrücke waren in der awk -Sprache traditionell nicht verfügbar. Der POSIX -Standard hat sie hinzugefügt, um awk zu machen und miteinander zu übereinstimmen. Ihre Verwendung wird jedoch wahrscheinlich alte AWK -Programme brechen, sodass GAWK sie nur vorsieht, wenn sie mit dieser Option angefordert werden oder wenn -POSIX angegeben ist.
Andere Tipps
Sie sollten Possix zwingen, {} in awk zu verwenden
echo xx y11y rrr | awk -W posix '{ if ($2 ~/y[1-5]{2}y/) print $3}'
Auf meiner Maschine:
$ echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
rrr
Wollten Sie das? Ich verwende Gnu awk 4.0.0 in Cygwin unter Windows XP.