web-dev-qa-db-fra.com

Comment rechercher plusieurs chaînes dans un fichier journal en utilisant moins de commande sous Unix?

Je souhaite rechercher plusieurs chaînes dans un fichier journal. Seules ces entrées doivent être mises en surbrillance où toutes les chaînes de recherche sont là dans la même ligne. Puis-je utiliser moins de commande pour cela ou toute autre meilleure option. La taille de mon fichier journal est généralement de quelques Go.

10
Satish

Lorsque vous souhaitez rechercher string1 ou string2, utilisation /string1|string2. Vous avez dit que vous vouliez des lignes où vous trouverez les deux:

/string1.*string2

Lorsque vous ne connaissez pas la commande dans la ligne et que vous souhaitez voir la ligne complète, vous aurez besoin

/.*string1.*string2.*|.*string2.*string1.*

Ou plus court

/.*(string1.*string2|string2.*string1).*

Combiner plus de mots sans ordre fixe deviendra un gâchis, et filtrer d'abord avec awk est bien.

12
Walter A

Utilisez awk pour filtrer le fichier et less pour afficher le résultat filtré:

awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less

Si le fichier est volumineux, vous pouvez utiliser stdbuf pour voir les résultats plus tôt dans less:

stdbuf awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less
3
hek2mgl