Está gostando da leitura?
Está aprendendo?
Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!
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: