Comment utiliser awk pour extraire une ligne avec correspondance exacte
Comment puis-je utiliser awk pour rechercher une correspondance exacte dans un fichier?
test.txt
hello10
hello100
hello1000
J'ai essayé ce qui suit, et il revient tous les 3 lignes
awk '$0 ~ /^hello10/{print;}' test.txt
grep -w hello10 fait le tour, mais sur cette zone grep version est très limité, et seulement quelques commutateurs
OriginalL'auteur Mark T | 2013-07-31
Vous devez vous connecter pour publier un commentaire.
À faire une ligne complète expression régulière, vous devez ancrer au début et à la fin de la ligne en utilisant
^
et$
:Mais vous n'êtes pas vraiment à l'aide de toutes les fonctions d'expression régulière à côté de l'ancrage que nous venons d'ajouter ce qui signifie que vous voulez plain old comparaison de chaînes de caractères:
awk
. Par exemple,$1
contient le modèle et je ne les suivants:awk -v p="$1" '$0 ~ p {print NR}' myFile
. Alors, comment dois-je faire la correspondance exacte, ce qui correspond à la ligne avec exactement le modèle figurant dans$1
? Merci beaucoup!OriginalL'auteur Chris Seymour
Vous pouvez essayer d'utiliser \< \> pour marquer la limite d'un mot comme " \ " <hello10\>.
OriginalL'auteur nicky_zs
Vous pouvez utiliser la commande sed
sed -n '/\bhello10\b/p' test.txt
Ici \b indique la limite de la parole vous êtes à la recherche pour.
OriginalL'auteur Jagan
Votre expression régulière commence avec un accent circonflexe, qui ancre le modèle de commencer au début de la ligne. Essayez de lire la page de manuel de awk pour voir si vous pouvez trouver un moyen de mettre fin à un schéma à la fin de la ligne, trop.
OriginalL'auteur Jeff N
Il y a aussi frontière de mot /y dans gawk
awk '{if(match("hello10", sprintf("\y%s\y",$0)) print $0}' test.txt
OriginalL'auteur GreenC