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: