Preciso procurar uma palavra-chave usando o awk, mas quero executar uma pesquisa que não diferencia maiúsculas de minúsculas (sem distinção entre maiúsculas e minúsculas).
Eu acho que a melhor abordagem é capitalizar o termo de pesquisa ("palavra-chave") e a linha de destino que o awk está lendo ao mesmo tempo. A partir desta pergunta, eu como usar toupper
para imprimir em maiúsculas, mas não sei como usá-lo em uma correspondência, porque essa resposta mostra apenas a impressão e não deixa o texto em maiúsculas em uma variável.
Aqui está um exemplo, dada esta entrada:
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla
Eu gostaria desta saída:
I want all
these text and numbers 123
and chars !"£$%&
as output
É isso que tenho, mas não sei como adicionar toupper
:
awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt
fonte
awk 'toupper($0)~/&&&KEY WORD&&&/ { p = ! p ; next } ; p;' text.txt
. Não há necessidade doBEGIN
bloco e, como a ação padrão é imprimir,p;
é suficiente.BEGIN
bloco", pois uma variável não inicializada é avaliada como falsa.tolower
está presente nos sistemas awk antigos (ou não tão antigos) (ex: AIX), mastoupper
nem sempre está disponível ^^.O gawk possui uma
IGNORECASE
variável interna, que, se configurada como diferente de zero, faz com que todas as comparações de cadeias e expressões regulares não façam distinção entre maiúsculas e minúsculas. Você poderia usar isso:etc. Isso é específico
gawk
, porém, mas acho que é mais legível do que a alternativa (mais portátil) do meuh. Se isso é um problema, é claro, depende inteiramente de você.fonte