Я знаю, как выполнить grep 2 ключевых слов, используя 1 команду, но мне удается только покрасить одно из них в выводе. Вот моя команда:
grep 'keyword1' file.log | grep 'keyword2'
Только keyword2
выделен. Как я могу сделать keyword1
выделенным одновременно?
Команда 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 'keyword2'
, который выделит ключевое слово2 синим цветом. Часть mt
означает, что grep
выделит соответствующий текст, используя этот код CSI , а 01;34
означает «жирный синий передний план на нормальном фоне».
Попробуйте использовать реальные регулярные выражения, а не передавайте их в другой экземпляр grep
, например :
grep -E "\<foo\>.*\<bar\>" file
Это ограничивает совпадение строк, в которых эти ключевые слова совпадают только в этом порядке, к сожалению. В любом случае, использование grep
в вашем вопросе довольно неэффективно, и вам следует избегать его. Ответ на @DanielH гораздо более прост для вашего случая, вероятно.
Для соответствия «или» ключевых слов я использую это регулярно:
grep -E "(foo|bar)" file