18

Когда я использую, например, cat file.txt | grep --color=tty "pattern" Я выделяю шаблон, который ищу. Когда мне нужно больше контекста вокруг каждого попадания, у grep есть параметры -A , -B и -C .

Однако я хочу отобразить весь файл (или любой другой вывод команды) и выделить определенный шаблон. Существует ли такая команда или инструмент выделения?

6 ответов6

21

На unix.stackexchange.com был ответ, в котором был такой хитрый трюк:

grep -E --color 'pattern|$' file.txt

или же

grep --color 'pattern\|$' file.txt

который соответствует вашему шаблону или концу строки в каждой строке. Только шаблон выделен.

9

Мне нравится Ack.

ack --passthru somepattern filename

Это как grep, но лучше. По умолчанию он подсвечивается, а с параметром --passthru он показывает весь файл (или стандартный ввод) вместо только совпадающих строк.

5

Я также рекомендую использовать less (или такое), но я хочу показать вам более дидактическое решение. Как только вы определили эту функцию:

function highlight()
{
    sed "s/$1/`tput smso`&`tput rmso`/g" "${2:--}"
}

Вы можете использовать это так:

command | highlight pattern
highlight pattern file.txt

Примечание. Эта версия чувствительна к регистру, чтобы изменить ее, добавьте i после g в выражении sed .

3

less , тем лучше

less -p 'mypattern' file.txt

или же

ridiculously | long | pipe | less

а затем в less / искать шаблон, который будет выделен.

Примечание:

Вы можете улучшить свою команду, например
установить псевдоним alias grep="grep --color=tty" и использовать его так:

grep 'mypattern' file.txt;
3

Передача -C в grep с достаточно высоким значением сделает это.

1

Есть хороший инструмент SuperCat , который служит именно для этой цели. Он может как раскрасить вывод вашей консоли, так и создать "выделенный" HTML из вашего ввода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .