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).