Sintaxe de expressão regular do awk com número de repetição - manipulação diferente entre o gawk 3 e o gawk 4 [duplicado]

4

Estou tendo problemas para entender ou explicar por que a seguinte expressão falha em gawk 3.1.x e ainda funciona em gawk 4.1.x :

(exemplo mínimo de trabalho)

echo ";#ADCDE#" | awk '/#.{5}#$/' - > produz uma correspondência em gawk 4.1.x , não produz uma correspondência em gawk 3.1.x

echo ";#ADCDE#" | awk '/#.*#$/' - > produz uma correspondência em ambos

Alguma coisa mudou entre o gawk 3 e 4 em como as expressões regulares são tratadas? Eu não achei que o constructo de repetição {n} fosse novo para expressões regulares. O mesmo comportamento acontece se eu alterar o ponto (.) Com uma classe de caractere ou [A-Z]

    
por user153222 24.02.2014 / 21:10

1 resposta

7

Adicionando --posix funciona em 3.1

echo ";#ADCDE#" | gawk --posix '/#.{5}#$/'

Eu tenho

awk --version
GNU Awk 3.1.6
...

Da minha man awk página

   r{n}
   r{n,}
   r{n,m}     One  or two numbers inside braces denote an interval expres‐
              sion.  If there is one number in the braces,  the  preceding
              regular  expression r is repeated n times.  If there are two
              numbers separated by a comma, r is repeated n  to  m  times.
              If  there  is  one  number  followed  by  a comma, then r is
              repeated at least n times.
              Interval expressions are only available if either --posix or
              --re-interval is specified on the command line.
    
por 24.02.2014 / 21:23