Відповіді:
grepКоманда приймає --color=alwaysпараметр, так що ви можете використовувати
grep 'keyword1' file.log --color=always | grep 'keyword2'
Як зазначає gertvdijk , ця команда може виявитися неефективною, але вона буде шукати всі рядки, що містять і ключове слово1, і ключове слово2. Якщо ви хочете виділити їх різними кольорами, можете використовувати
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
який виділить ключове слово2 синім кольором. У mtчастині означає , що grepбуде виділити відповідний текст з допомогою цього ІКА коди , і 01;34означає «жирний синій передній план на тлі нормального».
grep -R --color=always keyword1 . | grep keyword2має працювати. Ви перенаправивши висновок знову (наприклад, по конвеєру другий grepв less -R)? Якщо це так, вам потрібно буде додати і --color=alwaysдо другого.
--color=autoпотрібне було б для другого grep, відразу після 'keyword2'.
--color=alwaysдо відповіді, тому що ви, можливо, захочете передати його lessчи щось теж.
Спробуйте фактичні регулярні вирази, а не передавайте інший екземпляр grep, наприклад:
grep -E "\<foo\>.*\<bar\>" file
Це, на жаль, обмежує відповідність рядків, у яких ці ключові слова відповідають лише в такому порядку. У будь-якому випадку, використання grepВашого запитання є досить неефективним, і вам слід цього уникати. Відповідь @DanielH досить набагато простіше для вашого випадку, напевно.
Для відповідності ключових слів "або" я використовую це регулярно:
grep -E "(foo|bar)" file
foo.*bar|bar.*foo, чи це навіть потрібно для цього випадку (який, здається, є файлом журналу, який, мабуть, має стандартний порядок для ключових слів). Я додав свою відповідь перед тим, як ви оновили свою, але я буду тримати її на випадок, якщо виникла ситуація, коли ланцюжки greps дійсно необхідні (або будь-який інший кольоровий вихід не повинен надсилатися до терміналу, як grep | less -R).