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.
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.
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