Colorized grep - просмотр всего файла с выделенными совпадениями - PullRequest
458 голосов
/ 11 июня 2009

Я считаю флаг grep --color=always чрезвычайно полезным. Однако grep печатает только строки с совпадениями (если только вы не запросите контекстные строки). Учитывая, что каждая напечатанная строка имеет соответствие, выделение не добавляет столько возможностей, сколько могло бы.

Я бы очень хотел cat файл и увидеть весь файл с выделенными совпадениями шаблонов.

Есть ли какой-нибудь способ, которым я могу сказать, чтобы grep печатал каждую читаемую строку независимо от того, есть ли совпадение? Я знаю, что мог бы написать скрипт для запуска grep на каждой строке файла, но мне было любопытно, возможно ли это с помощью стандартного grep.

Ответы [ 17 ]

1 голос
/ 11 июня 2009

Хорошо, это один из способов,

wc -l filename

даст вам количество строк - скажем, NN, тогда вы можете сделать

grep -C NN --color=always filename
1 голос
/ 11 июня 2009

Вот сценарий оболочки, который использует функцию gsub Awk, чтобы заменить искомый текст правильной escape-последовательностью, чтобы отобразить его ярко-красным:

#! /bin/bash
awk -vstr=$1 'BEGIN{repltext=sprintf("%c[1;31;40m&%c[0m", 0x1B,0x1B);}{gsub(str,repltext); print}' $2

Используйте это так:

$ ./cgrep pattern [file]

К сожалению, он не обладает всеми функциями grep.

Для получения дополнительной информации вы можете обратиться к статье " Итак, вам нравится цвет " в Linux Journal

1 голос
/ 12 апреля 2012

В другом ответе упоминается ключ -Cn grep, который включает в себя n строк Context. Иногда я делаю это с n = 99 как быстрый и грязный способ получить [по крайней мере] скриншот из контекста, когда шаблон egrep кажется слишком неудобным или когда я на машине, на которой я не установил rcg и / или ccze.

Я недавно обнаружил ccze, который является более мощным колоризатором. Моя единственная жалоба заключается в том, что он ориентирован на экран (например, less, который я никогда не использую по этой причине), если вы не укажете ключ -A для вывода «raw ANSI».

+ 1 для rcg, упомянутого выше. Это все еще мой фаворит, так как его так легко настроить под псевдонимом. Примерно так обычно есть в моем ~ / .bashrc:

alias tailc = 'tail -f / my / app / log / file | rcg отправить "BOLD GREEN" получить ошибку "CYAN" "RED" '

1 голос
/ 17 мая 2013

еще один грязный путь:

grep -A80 -B80 --color FIND_THIS IN_FILE

Я сделал

alias grepa='grep -A80 -B80 --color'

в башрч.

0 голосов
/ 17 октября 2018

Я использую следующую команду для аналогичной цели:

grep -C 100 searchtext file

Это будет означать grep для печати 100 * 2 строк контекста, до и после выделенного текста поиска

0 голосов
/ 25 октября 2016

Если вы хотите выделить несколько рисунков разными цветами, см. этот скрипт bash.

Основное использование:

echo warn error debug info 10 nil | colog

Вы можете изменить рисунки и цвета во время работы, нажав одну клавишу, а затем введите клавишу.

0 голосов
/ 07 июня 2016

В качестве альтернативы вы можете использовать Серебряный Искатель и делать

ag <search> --passthrough
...