Простая проблема с awk и regex - PullRequest
       13

Простая проблема с awk и regex

3 голосов
/ 01 декабря 2011
 echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'

Почему я не могу получить вывод?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 01 декабря 2011

Необходимо включить «интервальные выражения» в сопоставлении регулярных выражений, указав параметр --posix или --re-interval.

например,

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

На странице man:

- re-interval Включите использование интервальных выражений при сопоставлении регулярных выражений (см. Регулярные выражения ниже).Интервальные выражения традиционно недоступны на языке AWK.Стандарт POSIX добавил их, чтобы сделать awk и egrep согласованными друг с другом.Однако их использование может привести к поломке старых программ на AWK, поэтому gawk предоставляет их только в том случае, если они запрашиваются с помощью этой опции или когда указан параметр --posix.

0 голосов
/ 01 декабря 2011

Вы должны заставить POSIX использовать {} в awk

echo xx y11y rrr | awk -W posix '{ if ($2 ~/y[1-5]{2}y/) print $3}'
0 голосов
/ 01 декабря 2011

На моей машине:

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

Это то, что вы хотели? Я использую GNU awk 4.0.0 в Cygwin на Windows XP.

...