Odpowiedzi:
grepPolecenie akceptuje --color=alwaysopcję, 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 mtczęść oznacza, że greppodświetli pasujący tekst za pomocą tego kodu CSI , i 01;34oznacza „pogrubiony niebieski pierwszy plan na normalnym tle”.
grep -R --color=always keyword1 . | grep keyword2powinno działać. Czy ponownie przekierowujesz dane wyjściowe (na przykład poprzez wpakowanie drugiego grepdo less -R)? Jeśli tak, musisz również dodać --color=alwaysdo drugiego.
--color=autopotrzebny byłby drugi grep, zaraz po nim 'keyword2'.
--color=alwaysdo odpowiedzi, ponieważ możesz chcieć ją potokować lesslub 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 greptwojego 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 grepsą naprawdę konieczne (lub w innym przypadku kolorowe wyjście nie powinno być wysyłane do terminala, na przykład grep | less -R).