Цветной grep – просмотр всего файла с выделенными совпадениями

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

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

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

Вот несколько способов сделать это:

 grep --color -E 'pattern|$' file grep --color 'pattern\|$' file egrep --color 'pattern|$' file 

Вот что-то такое же. Скорее всего, вы все равно будете использовать меньше, поэтому попробуйте следующее:

 less -p pattern file 

Он будет выделять шаблон и перейти к первому вхождению в файл.

Я бы рекомендовал ack – лучше, чем grep, инструмент поиска мощности для программистов .

 $ ack --color --passthru --pager = "$ {PAGER: -less -R}" файлы шаблонов
 $ ack --color --passthru файлы шаблонов |  меньше -R
 $ export ACK_PAGER_COLOR = "$ {PAGER: -less -R}"
 $ ack - файлы шаблонов passthru

Мне нравится, потому что он по умолчанию рекурсивный поиск каталогов (и делает намного умнее, чем grep -r ), поддерживает полные регулярные выражения Perl (а не POSIXish regex(3) ) и имеет гораздо более приятный контекстный дисплей при поиске многих файлов ,

Вы также можете создать псевдоним. Добавьте эту функцию в свой .bashrc (или .bash_profile в osx)

 function grepe { grep --color -E "$1|$" $2 } 

Теперь вы можете использовать псевдоним следующим образом: « ifconfig | grepe inet » или « grepe css index.html ».

(PS: не забудьте source ~/.bashrc чтобы перезагрузить bashrc в текущем сеансе)

Вы можете использовать мой highlight скрипт из https://github.com/kepkin/dev-shell-essentials

Это лучше, чем grep потому что вы можете выделить каждый матч своим цветом .

 $ command_here | highlight green "input" | highlight red "output" 

Снимок экрана проекта Github

Использовать colout программу: http://nojhan.github.io/colout/

Он предназначен для добавления цветовых оттенков в текстовый stream. Учитывая регулярное выражение и цвет (например, «красный»), он воспроизводит текстовый stream с выделенными совпадениями. например:

 # cat logfile but highlight instances of 'ERROR' in red colout ERROR red  

Вы можете связать несколько вызовов, чтобы добавить несколько разных цветовых оттенков:

 tail -f /var/log/nginx/access.log | \ colout ' 5\d\d ' red | \ colout ' 4\d\d ' yellow | \ colout ' 3\d\d ' cyan | \ colout ' 2\d\d ' green 

Или вы можете добиться того же, используя регулярное выражение с N группами (в скобках), а затем список из N цветов, разделенных запятыми.

 vagrant status | \ colout \ '\''(^.+ running)|(^.+suspended)|(^.+not running)'\'' \ green,yellow,red 

Я использую rcg из «Linux Server Hacks», O’Reilly. Он идеально подходит для того, что вам нужно, и может выделять несколько выражений с разными цветами.

 #!/usr/bin/perl -w # # regexp coloured glasses - from Linux Server Hacks from O'Reilly # # eg .rcg "fatal" "BOLD . YELLOW . ON_WHITE" /var/adm/messages # use strict; use Term::ANSIColor qw(:constants); my %target = ( ); while (my $arg = shift) { my $clr = shift; if (($arg =~ /^-/) | !$clr) { print "Usage: rcg [regex] [color] [regex] [color] ...\n"; exit(2); } # # Ugly, lazy, pathetic hack here. [Unquote] # $target{$arg} = eval($clr); } my $rst = RESET; while(<>) { foreach my $x (keys(%target)) { s/($x)/$target{$x}$1$rst/g; } print } 

Я добавил это в мои .bash_aliases:

 highlight() { grep --color -E "$1|\$" } 

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

 wc -l filename 

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

 grep -C NN --color=always filename 

Вот сценарий оболочки, который использует функцию 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

Еще один ответ упомянул переключатель grep -Cn, который включает в себя n строк контекста. Я иногда делаю это с 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» ‘

другой грязный способ:

 grep -A80 -B80 --color FIND_THIS IN_FILE 

Я сделал

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

в bashrc.

В качестве альтернативы вы можете использовать Silver Searcher и делать

 ag  --passthrough 

Если вы хотите выделить несколько шаблонов с разными цветами, см. Этот сценарий bash.

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

 echo warn error debug info 10 nil | colog 

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

Чтобы выделить шаблоны во время просмотра всего файла, h может это сделать.

Плюс он использует разные цвета для разных моделей.

 cat FILE | h 'PAT1' 'PAT2' ... 

Вы также можете подключить выход h к less -R для лучшего чтения.

Чтобы grep и использовать 1 цвет для каждого шаблона, cxpgrep может быть хорошим.

  • Как генерировать случайные имена цветов в C #
  • Преобразование RGB в оттенки серого / интенсивность
  • Цветовой индекс Star BV до уровня RGB
  • Как заполнить geom_polygon разными цветами выше и ниже y = 0?
  • Как определить цвета в качестве переменных в CSS?
  • Цветовые точки на графике по-разному в зависимости от вектора значений
  • Как применить непрозрачность к цветовой переменной CSS?
  • конвертировать шестнадцатеричный код в имя цвета
  • Java: плавный переход цвета
  • Как автоматически генерировать N "разных" цветов?
  • navbar color в Twitter Загрузочный
  • Interesting Posts

    Как выполнить частичное совпадение с java.util.regex. *?

    Как я могу указать нужную версию Node.js в packages.json?

    Как определить версию Windows из мертвой установки из Linux, имея доступ только к своей файловой системе?

    VLC 2.2.4 – как включить параметр «пауза левой кнопкой мыши»?

    Новая ошибка библиотеки Android Design с помощью AppBarLayout и панели инструментов

    Как я могу динамически включать модули Perl без использования eval?

    Установка сетевого тайм-аута для подключения JDBC

    .Net Framework 3.5 SP1 на Windows 7, не распознанный установщиками

    Использование Java для поиска подстроки большей строки с использованием регулярного выражения

    Когда должен быть создан / открыт экземпляр EntityManagerFactory?

    Вычисление факториала больших чисел в C

    Как найти все файлы, содержащие только нулевые байты (любое их число)

    Использовать беспроводной маршрутизатор в качестве беспроводного сетевого адаптера?

    Команда перед каждой командой bash

    Чтение образцов с помощью AVAssetReader

    Давайте будем гением компьютера.