Совпадение цветов, но печать других строк тоже

У меня есть псевдоним: alias grep='grep --color=auto' . Я хочу иметь способ напечатать не только совпадающую строку, но и все, и только шаблоны соответствия цвета. Я сомневаюсь, что есть возможность сделать это в самой grep . Любой другой инструмент? Или идея, как этого достичь?

4 Solutions collect form web for “Совпадение цветов, но печать других строк тоже”

Вы можете сделать трюк с опцией -E :

 grep -E '(^|pattern)' file 

Вот простой вывод:

введите описание изображения здесь

Вы можете сделать это, используя бит sed и терминальную магию:

 $ sed -e 's/<pattern>/\x1b[31;01m&\x1b[m/g' <file> 

Это заменяет каждое вхождение <pattern> совпадающим текстом, окруженным \x1b[31;01m (это конечная escape-последовательность для «заданного цвета переднего плана, выделенного жирным красным цветом») и \x1b[m (то же самое для «установленного цвета переднего плана по умолчанию").

Я написал небольшой скрипт, который будет окрашивать любую строку, которую вы ему даете:

 #!/usr/bin/env perl use Getopt::Std; use strict; use Term::ANSIColor; my %opts; getopts('hic:l:',\%opts); if ($opts{h}){ print<<EoF; Use -l to specify the pattern(s) to highlight. To specify more than one pattern use commas. -l : A Perl regular expression to be colored. Multiple expressions can be passed as comma separated values: -l foo,bar,baz -i : makes the search case sensitive -c : comma separated list of colors; EoF exit(0); } my $case_sensitive=$opts{i}||undef; my @color=('bold red','bold blue', 'bold yellow', 'bold green', 'bold magenta', 'bold cyan', 'yellow on_magenta', 'bright_white on_red', 'bright_yellow on_red', 'white on_black'); if ($opts{c}) { @color=split(/,/,$opts{c}); } my @patterns; if($opts{l}){ @patterns=split(/,/,$opts{l}); } else{ $patterns[0]='\*'; } # Setting $| to non-zero forces a flush right away and after # every write or print on the currently selected output channel. $|=1; while (my $line=<>) { for (my $c=0; $c<=$#patterns; $c++){ if($case_sensitive){ if($line=~/$patterns[$c]/){ $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ge; } } else{ if($line=~/$patterns[$c]/i){ $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ige; } } } print STDOUT $line; } 

Если вы сохраните его как color в каталоге, который находится в вашем $PATH и сделайте его исполняемым ( chmod +x /usr/bin/color ), вы можете покрасить соответствующий шаблон следующим образом:

 echo -e "foo\nbar\nbaz\nbib" | color -l foo,bib 

Это даст:

введите описание изображения здесь

Как написано, сценарий имеет предопределенные цвета для 10 разных шаблонов, поэтому, давая ему список, разделенный запятыми, как у меня в приведенном выше примере, будет окрашивать каждый из шаблонов, соответствующих другому цвету.

Это встроенный в ack цветной выход по умолчанию, а опция --passthru печатает все строки.

  • Сколько текста grep / egrep потребляет каждый раз?
  • Grep для фильтрации и отображения только начала строки
  • сопоставлять и печатать несколько столбцов из двух файлов
  • Как выполнить команду в заданной строке в каждой строке файла?
  • Как добавить столбец, если строка содержит строку?
  • Как бы я grep для записи файла паролей без использования 'username'
  • Прочитайте больший файл-A и найдите связанные строки во втором файле и создайте вывод
  • Использование grep с символической ссылкой
  • Как я могу grep для того или иного (2 вещи) в файле?
  • Как извлечь конкретное поле из строк из файла на основе соответствия последующих строк
  • Найдите точную строку с grep
  • Interesting Posts

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

    Как подсчитать количество слов и напечатать строки, соответствующие точному шаблону?

    bash_completion для разрешения ip в именах хостов

    Как настроить скорость передачи по умолчанию для 802.11 («WiFi») в Debian 7 GNU / Linux?

    Каков наиболее эффективный способ перемещения большого количества файлов, которые находятся в одном каталоге?

    Когда использовать арку против noarch при создании RPM?

    Как быстро переключаться между пользователями на одном терминале?

    Ubuntu SSH для удаленной подпапки

    Проблемы с загрузкой Debian на ноутбуке Dell

    Использовать sed для редактирования кода

    Быстрый способ получить информацию из огромного файла журнала в unix

    X висит после спящего режима Fedora 18

    Linux: инструмент командной строки для простого изменения реальной беспроводной сети, подключенной к сети?

    очистка / dev / md0 файловая система (рейд)

    Что означает? $?

    Linux и Unix - лучшая ОС в мире.