Frage

 echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'

Warum kann ich keine Ausgabe bekommen?

Vielen Dank.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top