awk -v pattern="$1" '$0 ~ pattern'
Tem um problema em que awk
expande as sequências de escape ANSI C (como \n
para nova linha, \f
para feed de formulário, \
para barra invertida e assim por diante) em $1
. Portanto, isso se torna um problema se $1
contiver caracteres de barra invertida, o que é comum em expressões regulares. Outra abordagem que não sofre desse problema é escrevê-lo:
PATTERN=$1 awk '$0 ~ ENVIRON["PATTERN"]'
Quão ruim será depender da implementação awk
.
$ nawk -v 'a=\.' 'BEGIN {print a}'
.
$ mawk -v 'a=\.' 'BEGIN {print a}'
\.
$ gawk -v 'a=\.' 'BEGIN {print a}'
gawk: warning: escape sequence '\.' treated as plain '.'
Todos os awk
s funcionam da mesma forma para seqüências de escape válidas:
$ a='\-\b' awk 'BEGIN {print ENVIRON["a"]}' | od -tc
0000000 \ \ - \ b \n
0000006
(o conteúdo de $a
passou como está)
$ awk -v a='\-\b' 'BEGIN {print a}' | od -tc
0000000 \ - \b \n
0000004
( \
foi alterado para \
e \b
foi alterado para um caractere de retrocesso).