Відповіді:
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
, чи це навіть потрібно для цього випадку (який, здається, є файлом журналу, який, мабуть, має стандартний порядок для ключових слів). Я додав свою відповідь перед тим, як ви оновили свою, але я буду тримати її на випадок, якщо виникла ситуація, коли ланцюжки grep
s дійсно необхідні (або будь-який інший кольоровий вихід не повинен надсилатися до терміналу, як grep | less -R
).