característica como fazer -------------------------------------- busca função match substituição funções sub, gensub divisão função split ER crua /entre barras/ ignore M/m variável IGNORECASE global função gsub, opção "g"
AWK é uma linguagem antiga (1977) que combina processamento de texto com estruturas de uma linguagem genérica, possuindo condicionais, operações aritméticas e afins.
Temos cinco funções que utilizam ERs no AWK: match, sub, gsub, gensub e split. Em todas elas, para ignorar a diferença entre maiúsculas e minúsculas, basta definir algum valor para a variável IGNORECASE, que é vazia por padrão e, para colocar a ER no formato cru basta colocá-la entre /barras/.
As funções sub e gsub não retornam o texto alterado, e sim o número de substituições efetuadas. E ainda, o texto alterado é gravado diretamente na própria variável que continha o texto original. Uma grande limitação de ambas as funções é que elas não têm suporte a retrovisores.
texto = "a1b2c3"
n = gsub("[0-9]", ".", texto)
print n,texto
Esse trecho de código imprime 3 a.b.c., ou seja, o número de substituições efetuadas, seguido do texto modificado. A diferença entre as duas é que sub troca só a primeira ocorrência e gsub é global, troca todas.
Mas como essas funções são muito chatas de usar, no AWK da GNU tem uma melhor, a gensub. Esta é normal, retorna o texto modificado, não regrava a variável com o texto original, a globalidade do comando é definida com um argumento (g ou um número), e tem suporte a retrovisores. Veja um exemplo completo:
print gensub(/(\w)/, "\\1.", "g", "abc")
Vamos à nossa dissecação. A ER \w, que casa um caractere componente de uma palavra, está no formato cru, além de agrupada. A substituição do trecho casado é feita pelo conteúdo do grupo 1, seguido de um ponto literal.
Note que o escape do número um está duplicado, pois como apenas a ER pode ser colocada no formato cru, esse texto primeiro será interpretado pela linguagem, para depois ser mandado à função gensub.
Segue o g que indica que é uma substituição global e por fim, o texto original a ser alterado. Ah! O resultado da substituição é a.b.c., antes que eu me esqueça...
O AWK da GNU é encontrada no repositório da GNU: