Я считаю , grep
«s --color=always
флаг , чтобы быть чрезвычайно полезным. Однако grep печатает только строки с совпадениями (если только вы не запросите контекстные строки). Учитывая, что каждая печатаемая строка имеет соответствие, выделение не добавляет столько возможностей, сколько могло бы.
Мне бы очень хотелось, чтобы cat
файл и увидеть весь файл с выделенными совпадениями шаблонов.
Есть ли какой-нибудь способ, которым я могу сказать, чтобы grep печатал каждую читаемую строку независимо от того, есть ли совпадение? Я знаю, что мог бы написать скрипт для запуска grep в каждой строке файла, но мне было любопытно, возможно ли это с помощью стандарта grep
.
sed
.sed
решение получает вас несколько цветов за счет дополнительной сложности (вместо примерно 30 символов , имеющих около 60 символов).Ответы:
Вот несколько способов сделать это:
источник
egrep --color "pattern|" file
(credit stackoverflow.com/a/7398092/50979 )egrep --color "pattern1|pattern2|$"
, В противном случае цветовая подсветка не происходит.Вот что-то в том же духе. Скорее всего, вы будете использовать меньше, так что попробуйте это:
Он выделит шаблон и перейдет к его первому появлению в файле.
источник
-
:… | less -p pattern -
-i
параметра сделает регистр нечувствительным, как вless -ip pattern file
.less
с-R
переключателем:… | less -Rip introduction -
Я хотел бы порекомендовать ack - лучше, чем grep, мощный инструмент поиска для программистов .
Мне это нравится, потому что он по умолчанию выполняет рекурсивный поиск по каталогам (и делает это намного умнее
grep -r
), поддерживает полные регулярные выражения Perl (а не POSIXishregex(3)
) и имеет намного более приятное отображение контекста при поиске многих файлов.источник
ack
умный, но иногда слишком умный, и он исключает тип файла, в котором было попадание.ack -a
будет искать все типы файлов, в то же время исключая их.git/
.svn/
и т. Д.ack
не просматривает мои изображения, поэтому-a
делает слишком много. Я добавил--type-set=freemarker=.ftl
к своему~/.ackrc
, чтобы привести один пример.Вы можете использовать мой
highlight
скрипт из https://github.com/kepkin/dev-shell-essentialsЭто лучше, чем
grep
потому, что вы можете выделить каждый матч своим цветом .источник
grep
, которое является стандартной утилитой на машинах с * nix.colout
упомянуто в другом ответе.colout
, что хорошо, если вы хотите проверить, что он делает.Вы также можете создать псевдоним. Добавьте эту функцию в ваш .bashrc (или .bash_profile на osx)
Теперь вы можете использовать псевдоним как это: "
ifconfig | grepe inet
" или "grepe css index.html
".(PS: не забудьте
source ~/.bashrc
перезагрузить bashrc на текущей сессии)источник
--color=always
вместо--color
less
интерпретацию цветовых кодов, используйтеless -R
.Используйте
colout
программу: http://nojhan.github.io/colout/Он предназначен для добавления цветных бликов в текстовый поток. Имея регулярное выражение и цвет (например, «красный»), он воспроизводит текстовый поток с выделенными совпадениями. например:
Вы можете связать несколько вызовов, чтобы добавить несколько разных цветов:
Или же вы можете добиться того же, используя регулярное выражение с N группами (разделенные скобками части регулярного выражения), за которым следует разделенный запятыми список из N цветов.
источник
grep
, и она уже раскрыта в ответах,colout
это лучшее решение для вашей проблемы, лучшее, что я знаю. В соответствии с философией UNIX, программы должны быть написаны, чтобы делать одну вещь хорошо. Ибоgrep
это фильтрация текстового потока. Ибоcolout
это раскраска или выделение текстового потока.colout
является таким широко полезным инструментом. Изучите его один раз, используйте его во многих ситуациях, а не изучайте один инструмент для выделения лог-файлов, другой для выделения результатов теста и т. Д.Я использую rcg из "Linux Server Hacks", О'Рейли. Это идеально подходит для того, что вы хотите, и может выделить несколько выражений, каждое из которых имеет разные цвета.
источник
-z
Вариант для Grep также довольно скользкий!источник
Я добавил это в мой .bash_aliases:
источник
Чтобы выделить шаблоны при просмотре всего файла, h может сделать это.
Плюс он использует разные цвета для разных узоров.
Вы можете также направить вывод
h
вless -R
для лучшего чтения.Чтобы использовать grep и использовать 1 цвет для каждого шаблона, cxpgrep может подойти.
источник
Хорошо, это один из способов,
даст вам количество строк - скажем, NN, то вы можете сделать
источник
Вот скрипт оболочки, который использует функцию gwub от Awk, чтобы заменить искомый текст правильной escape-последовательностью, чтобы он отображался ярко-красным:
Используйте это так:
К сожалению, он не обладает всеми функциями grep.
Для получения дополнительной информации вы можете обратиться к статье « Так вам нравится цвет » в Linux Journal
источник
В другом ответе упоминается ключ -Cn от grep, который содержит n строк Context. Иногда я делаю это с n = 99 как быстрый и грязный способ получить [по крайней мере] скриншот из контекста, когда шаблон egrep кажется слишком неудобным, или когда я на машине, на которой я не установил rcg и / или ccze.
Я недавно обнаружил,
ccze
что это более мощный колоризатор. Моя единственная жалоба заключается в том, что она ориентирована на экран (напримерless
, которую я никогда не использую по этой причине), если вы не укажете ключ -A для вывода «raw ANSI».+1 за
rcg
упоминание выше. Это все еще мой фаворит, так как его так легко настроить под псевдонимом. Примерно так обычно есть в моем ~ / .bashrc:псевдоним tailc = 'tail -f / my / app / log / file | rcg отправить "BOLD GREEN" получить ошибку "CYAN" "RED" '
источник
еще один грязный путь:
Я сделал
в башрч.
источник
В качестве альтернативы вы можете использовать Серебряный Искатель и сделать
источник
Если вы хотите выделить несколько рисунков разными цветами, посмотрите этот скрипт bash.
Основное использование:
Вы можете изменить шаблоны и цвета во время работы, нажав одну клавишу, а затем введите клавишу.
источник
Я использую следующую команду для аналогичной цели:
grep -C 100 searchtext file
Это скажет grep, чтобы напечатать 100 * 2 строки контекста, до и после выделенного поискового текста.
источник
Вот мой подход , вдохновленный решением @ kepkin:
Это принимает несколько аргументов (но не позволяет настраивать цвета). Пример:
источник
Option
-C999
сделает свое дело при отсутствии опции для отображения всех контекстных строк. Большинство других вариантов grep также поддерживают это. Однако: 1) вывод не производится, если совпадения не найдено, и 2) эта опция отрицательно влияет на эффективность grep: когда-C
значение велико, многие строки могут быть временно сохранены в памяти, чтобы grep определил, какие строки контекста отображать, когда происходит совпадение. Обратите внимание, что реализации grep не загружают входные файлы, а читают несколько строк или используют скользящее окно поверх ввода. Часть «before» контекста должна храниться в окне (памяти), чтобы вывести строки контекста «before» позже, когда найдено совпадение.Шаблон, такой как
^|PATTERN
илиPATTERN|$
любой другой под-шаблон, соответствующий пустому совпадению, такой как[^ -~]?|PATTERN
хороший трюк. Тем не менее, 1) эти шаблоны не показывают несоответствующие строки, выделенные как контекст, и 2) это не может быть использовано в сочетании с некоторыми другими опциями grep, такими как-F
и-w
, например.Так что ни один из этих подходов не устраивает меня. Я использую ugrep и расширенный grep с возможностью
-y
эффективно отображать все несоответствующие выходные данные в виде выделенных цветом строк контекста. Другие инструменты, подобные grep, такие как ag и ripgrep, также предлагают возможность сквозного доступа. Но ugrep совместим с GNU / BSD grep и предлагает расширенный набор опций grep, таких как-y
и-Q
. Например, вот что-y
отображается в сочетании с-Q
(интерактивный интерфейс запросов для ввода шаблонов):источник