Réponses:
La grep
commande accepte une --color=always
option, vous pouvez donc utiliser
grep 'keyword1' file.log --color=always | grep 'keyword2'
Comme le souligne gertvdijk , cette commande peut être inefficace, mais elle recherchera toutes les lignes qui contiennent à la fois mot-clé1 et mot-clé2. Si vous souhaitez les surligner de différentes couleurs, vous pouvez utiliser
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
qui mettra en évidence le mot-clé2 en bleu. La mt
partie signifie que grep
mettra en évidence le texte correspondant en utilisant ce code CSI , et 01;34
signifie "un premier plan bleu gras sur un fond normal".
grep -R --color=always keyword1 . | grep keyword2
devrait marcher. Vous allez être redirigé la sortie à nouveau (comme en canalisant le second grep
en less -R
)? Si c'est le cas, vous devrez également ajouter --color=always
au second.
--color=auto
serait nécessaire pour le second grep
, juste après 'keyword2'
.
--color=always
à la réponse, parce que vous voudrez peut-être la diriger less
ou quelque chose aussi.
Essayez des expressions régulières réelles, plutôt que de diriger vers une autre instance de grep
, par exemple:
grep -E "\<foo\>.*\<bar\>" file
Cela se limite malheureusement aux lignes correspondantes dans lesquelles les mots-clés correspondent dans cet ordre. Quoi qu'il en soit, l'utilisation de grep
dans votre question est plutôt inefficace et vous devez l'éviter. La réponse de @DanielH est probablement beaucoup plus simple pour votre cas, probablement.
Pour une correspondance «ou» de mots clés, j'utilise ceci régulièrement:
grep -E "(foo|bar)" file
foo.*bar|bar.*foo
, ou si cela est même nécessaire pour ce cas (qui semble être un fichier journal qui aurait probablement un ordre standard pour les mots clés). J'ai ajouté ma réponse avant de mettre à jour la vôtre, mais je la garderai au cas où il y aurait une situation où les chaînes grep
sont vraiment nécessaires (ou toute autre sortie colorée ne devrait pas être envoyée au terminal, par exemple grep | less -R
).