Aparentemente, uma expressão de colchetes no BSD Awk que contém uma classe de caracteres irá ignorar quaisquer outros caracteres após a classe de caracteres:
MacOS $ cat file.txt
_
-
.
a
B
8
:
;
@
~
,
MacOS $ awk '/[@~.[:alnum:]:;-]/' file.txt
.
a
B
8
@
~
MacOS $ awk '/[-;:@~.[:alnum:]]/' file.txt
-
.
a
B
8
:
;
@
~
MacOS $ awk '/[^@~.[:alnum:]:;-]/' file.txt
_
-
:
;
,
MacOS $ awk '/[^-;:@~.[:alnum:]]/' file.txt
_
,
MacOS $
No GNU Awk (mostrado no Ubuntu 16.04), o comportamento é diferente; outros caracteres na expressão de colchetes são tratados da mesma forma, independentemente de virem antes ou depois da classe de caracteres:
Linux $ cat file.txt
_
-
.
a
B
8
:
;
@
~
,
Linux $ awk '/[@~.[:alnum:]:;-]/' file.txt
-
.
a
B
8
:
;
@
~
Linux $ awk '/[-;:@~.[:alnum:]]/' file.txt
-
.
a
B
8
:
;
@
~
Linux $ awk '/[^@~.[:alnum:]:;-]/' file.txt
_
,
Linux $ awk '/[^-;:@~.[:alnum:]]/' file.txt
_
,
Linux $
Isso é documentado em algum lugar? Ou, se for um bug, é um bug conhecido ? (E se for um bug conhecido, ele é corrigido em versões posteriores do Awk?)
O que devo fazer com essa descoberta? Existe algum lugar para eu abrir um relatório de bug?