awk character class mystery

4

Parece que não consigo usar uma classe de caractere para uma expressão regular awk , quase exatamente como descrito aqui :

user@host:~$ awk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan

compiled limits:
max NF             32767
sprintf buffer      2040
user@host:~$ echo "host.company.com has address 192.168.22.82" |awk '/^[a-zA-Z0-9.-]+ has address/ { print $4 }'
192.168.22.82
user@host:~$ echo "host.company.com has address 192.168.22.82" |awk '/^[[:alnum:].-]+ has address/ { print $4 }'
user@host:~$

Alguém vê porque o segundo comando não consegue encontrar o campo de endereço?

    
por Aaron Hanson 07.08.2014 / 20:02

2 respostas

6

É um bug em mawk 1.3.3 e foi reportado aqui . Você pode atualizar para mawk 1.3.4 ou usar patch para corrigir o bug.

$ mawk -W version
mawk 1.3.4 20130219
Copyright 2013, Thomas E. Dickey
Copyright 1996, Michael D. Brennan

internal regex
compiled limits:
max NF             32767
sprintf buffer      2040

$ echo "host.company.com has address 192.168.22.82" | mawk '/^[[:alnum:].-]+ has address/ { print $4 }'
192.168.22.82

mawk usa expressões regulares estendidas como com egrep , portanto deve suportar classes de caracteres POSIX.

    
por 07.08.2014 / 20:17
5

A documentação a que você está se referindo é da versão GNU de Awk , mas a versão que você tem é mawk (como mostrado pelo seu primeiro comando), que é uma variante awk que parece não suportar classes de caracteres POSIX como [:alpha:] ou [:alnum:] .

Editar: Como mencionado pelo Gnouc , mawk suporta classes de caracteres POSIX da versão 1.3.4 em diante , portanto, uma atualização pode corrigir seu problema.

    
por 07.08.2014 / 20:10

Tags