grep: как раскрасить 2 ключевых слова?

Я знаю, как выполнить grep 2 ключевых слов, используя 1 команду, но мне удается только покрасить одно из них в выводе. Вот моя команда:

grep 'keyword1' file.log | grep 'keyword2'

Только keyword2 выделен. Как я могу сделать keyword1 выделенным одновременно?

12
задан 31 December 2012 в 07:03

2 ответа

Команда 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 означает «жирный синий передний план на нормальном фоне».

0
ответ дан 31 December 2012 в 07:03

Попробуйте использовать реальные регулярные выражения, а не передавайте их в другой экземпляр grep, например :

grep -E "\<foo\>.*\<bar\>" file

Это ограничивает совпадение строк, в которых эти ключевые слова совпадают только в этом порядке, к сожалению. В любом случае, использование grep в вашем вопросе довольно неэффективно, и вам следует избегать его. Ответ на @DanielH гораздо более прост для вашего случая, вероятно.

Для соответствия «или» ключевых слов я использую это регулярно:

grep -E "(foo|bar)" file
0
ответ дан 31 December 2012 в 07:03

Другие вопросы по тегам:

Похожие вопросы: