Odpowiedzi:
grep
Polecenie akceptuje --color=always
opcję, dzięki czemu można używać
grep 'keyword1' file.log --color=always | grep 'keyword2'
Jak wskazuje gertvdijk , to polecenie może być nieefektywne, ale będzie szukało wszystkich wierszy zawierających zarówno słowo kluczowe1, jak i słowo kluczowe2. Jeśli chcesz je wyróżnić w różnych kolorach, możesz użyć
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
który podświetli słowo kluczowe2 na niebiesko. Ta mt
część oznacza, że grep
podświetli pasujący tekst za pomocą tego kodu CSI , i 01;34
oznacza „pogrubiony niebieski pierwszy plan na normalnym tle”.
grep -R --color=always keyword1 . | grep keyword2
powinno działać. Czy ponownie przekierowujesz dane wyjściowe (na przykład poprzez wpakowanie drugiego grep
do less -R
)? Jeśli tak, musisz również dodać --color=always
do drugiego.
--color=auto
potrzebny byłby drugi grep
, zaraz po nim 'keyword2'
.
--color=always
do odpowiedzi, ponieważ możesz chcieć ją potokować less
lub coś w tym stylu.
Wypróbuj rzeczywiste wyrażenia regularne zamiast potokować do innej instancji grep
, np .:
grep -E "\<foo\>.*\<bar\>" file
Niestety ogranicza to pasujące linie, w których słowa kluczowe są dopasowane tylko w tej kolejności. W każdym razie użycie grep
twojego pytania jest raczej nieefektywne i powinieneś tego unikać. Prawdopodobnie odpowiedź na @DanielH jest dla twojej sprawy o wiele prostsza .
Do dopasowania słów kluczowych „lub” używam tego regularnie:
grep -E "(foo|bar)" file
foo.*bar|bar.*foo
, czy jest to nawet konieczne w tym przypadku (który wydaje się być plikiem dziennika, który prawdopodobnie miałby standardowe zamówienie na słowa kluczowe). Dodałem moją odpowiedź, zanim zaktualizowałeś swoją, ale zachowam ją na wypadek, gdyby istniała sytuacja, w której łańcuchy grep
są naprawdę konieczne (lub w innym przypadku kolorowe wyjście nie powinno być wysyłane do terminala, na przykład grep | less -R
).