Você pode usar &
na substituição para se referir ao texto correspondente :
$ awk '{gsub(/[[{|]/, "\\&", $0); print}' <<<"abc { | [ def"
abc \{ \| \[ def
Isso é apenas uma classe de caractere [...]
regular com [
, |
e {
no padrão e uma barra invertida com escape suficiente seguida por &
na substituição. Você precisa de todos eles.
Para padrões mais complexos o gawk tem uma função gensub
que permite fazer referências a parte do texto, como \1
, mas você não precisa disso aqui. Todos os awk
s compatíveis com POSIX suportam o comportamento &
para incluir toda a subsequência correspondente na substituição.