O manual GNU awk
( seção 3.5 ) documenta que o regex \<
é específico do gawk e, portanto, não se deve esperar que ele funcione em outras implementações.
De acordo com man mawk
, se você colocar uma barra invertida na frente de um caractere não especial, a barra invertida é removida. Assim, sob mawk
, \<
é interpretado simplesmente como um caractere de colchete angular.
Exemplos
Eu simplifiquei o regex para fornecer exemplos do comportamento diferente:
$ echo -e " a\n ab.conf\n <ac.conf" | gawk '/\<(a|x)/ { print}'
a
ab.conf
<ac.conf
$ echo -e " a\n ab.conf\n <ac.conf" | mawk '/\<(a|x)/ { print}'
<ac.conf
Novamente, gawk
interpreta \<
como o começo de uma palavra, enquanto mawk
a interpreta simplesmente como um colchete angular.
O que o POSIX diz sobre esse problema
O manual do GNU awk
explica:
If you place a backslash in a string constant before something that is not one of the characters previously listed, POSIX awk purposely leaves what happens as undefined.
Em outras palavras, neste caso, os diferentes intérpretes awk
estão livres para tomar suas próprias decisões.