J'ai besoin de rechercher un mot clé en utilisant awk, mais je veux effectuer une recherche insensible à la casse (non sensible à la casse).
Je pense que la meilleure approche consiste à capitaliser à la fois le terme de recherche («mot clé») et la ligne cible que awk lit en même temps. À partir de cette question, comment utiliser toupper
pour imprimer en majuscules, mais je ne sais pas comment l'utiliser dans une correspondance car cette réponse montre simplement l'impression et ne laisse pas le texte en majuscule dans une variable.
Voici un exemple, compte tenu de cette entrée:
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla
J'aimerais cette sortie:
I want all
these text and numbers 123
and chars !"£$%&
as output
C'est ce que j'ai, mais je ne sais pas comment ajouter toupper
:
awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt
la source
awk 'toupper($0)~/&&&KEY WORD&&&/ { p = ! p ; next } ; p;' text.txt
. Il n'y a pas besoin deBEGIN
bloquer et puisque l'action par défaut est d'imprimer,p;
c'est suffisant.BEGIN
bloc" car une variable non initialisée est évaluée comme fausse.tolower
est présent sur les systèmes awk anciens (ou pas si anciens) (ex: AIX), maistoupper
n'est pas toujours disponible ^^.gawk a une
IGNORECASE
variable intégrée qui, si elle est définie sur non nul, rend toutes les comparaisons de chaînes et d'expressions régulières insensibles à la casse. Vous pouvez utiliser cela:etc. Ceci est spécifique à
gawk
, cependant, mais je le trouve plus lisible que l'alternative (plus portable) de meuh. Que ce soit un problème, cela dépend bien sûr de vous.la source