Получение цветных результатов при использовании трубы от grep до менее

56581
Jeremy Powell

Я часто использую опцию --colour в grep, но часто я использую и меньше. Как я могу труба grep результаты, чтобы уменьшить и все же сохранить окраску. (Или это возможно?)

grep "search-string" -R * --colour | less 

РЕДАКТИРОВАТЬ :

Я ищу прямое решение или что-нибудь эквивалентное этому.

218
возможный дубликат команды [Получить цвета в 'меньше' '] (http://superuser.com/questions/117841/get-colors-in-less-command) Ciro Santilli 新疆改造中心 六四事件 法轮功 10 лет назад 0

5 ответов на вопрос

247
drrlvn

Когда вы просто запускаете, grep --colorэто подразумевает, grep --color=autoкоторый определяет, является ли вывод выводом и, если да, включает цвета. Однако, когда он обнаруживает трубу, он отключает окраску. Следующая команда:

grep --color=always -R "search string" * | less 

Всегда будет включать окраску и отменять автоматическое обнаружение, и вы получите выделение цветом less.

РЕДАКТИРОВАТЬ: Хотя использование просто lessработает для меня, возможно, старая версия требует -Rфлаг для обработки цветов, как это было предложено.

Вам нужно использовать `less -R`, чтобы кодировка цвета интерпретировалась менее правильно therefromhere 15 лет назад 122
У меня это работало только с `less`, это может зависеть от версии. drrlvn 15 лет назад 1
Вот это да. Я думал, что «авто» зависит только от типа терминала. Возможно, я прыгаю из пистолета, но это может революционизировать способ использования Linux: P Jeremy Powell 15 лет назад 0
Потрясающие. Хотя я тоже использую `less -R`, чтобы получить` less` для отображения цветов, а не escape-коды окраски: o) Owen Blacker 12 лет назад 0
(Надеюсь) полезное дополнение: мне нужно было исключить некоторые совпадения, но сохранить цвет, поэтому я на самом деле получил файл `grep pattern file | grep -v badpattern | grep --colour = всегда шаблон | менее -R`, что полностью соответствует моим потребностям. (Еще раз спасибо!) Owen Blacker 12 лет назад 1
Я не могу поверить, что они просто внедрили функцию обработки цвета в "less" и поэтому упустили возможность иметь специальный инструмент "colorless". Только для названия это должно было быть сделано! Возможно, мне следует написать патч, который автоматически вызывает -R, когда двоичный файл запускается как `colorless`. Christian 11 лет назад 7
Да, тоже работает для git log -p. :) David Winiecki 11 лет назад 0
@OwenBlacker причина, по которой это «просто» работает для вас, возможно потому, что некоторые дистрибутивы Linux устанавливают псевдонимы по умолчанию. Сделайте `alias less` в терминале и посмотрите, что вы получите. PhilT 10 лет назад 0
Использование grep без `-R` и` more` вместо `less -R` работает для меня ... и короче. Другими словами, это работает в Fedora 20 `grep --color = always -Irn" foo_bar "| more` Ray Foss 10 лет назад 0
@spatz: Вы можете интегрировать [ответ Денниса] (http://superuser.com/a/36201/102954) в свой, чтобы сделать его универсальным магазином. Интеграционные ответы совершенно необходимы для SO. Спасибо! Это решило бы проблему, о которой говорил Оуэн в своем комментарии. cfi 9 лет назад 0
@OwenBlacker Возможно, это не псевдоним. Возможно, вы установили `$ LESS` с помощью` -R`. greyfade 8 лет назад 1
Ubuntu 16.04 `cat file.log | grep --color = всегда пароль | меньше -R` Ligemer 6 лет назад 0
Чтобы по умолчанию `less` всегда проходил через цвета, отредактируйте переменную окружения` LESS`, включив в нее `-R` или ее длинную форму` --RAW-CONTROL-CHARS`. Переменная `LESS` содержит разделенный пробелами список флагов по умолчанию для` less`. Rory O'Kane 6 лет назад 0
27
Dennis Williamson

Вы можете поместить это в свой .bashrcфайл:

export GREP_OPTIONS="--color=always" 

или создайте псевдоним как это:

alias grepc="grep --color=always" 

и вам нужно будет использовать -Rопцию для less, как указано оттуда

Внимание !: GREP_OPTIONS = "- color = всегда" может нарушить _many_ скрипты, которые используют grep (или (e | f) grep). mctylr 14 лет назад 26
Ага, лучше просто псевдоним grep. Вы всегда можете получить чистый `grep` с помощью` GREP` или переопределить опцию `--color` вручную. asmeurer 13 лет назад 4
Это не работает для меня, псевдоним работает, хотя. saeedgnu 10 лет назад 0
4
Iazel

В таком случае я предпочитаю создавать небольшие sh-файлы и помещать их в них /usr/local/bin.
Я обычно использую grepрекурсивный способ pwd, так что это мой личный сценарий:

#!/bin/sh grep --color=always -r "$@" . | less -R 

А потом я просто скопировал его как /usr/local/bin/g(да, я часто его использую)

Почему бы просто не использовать функции оболочки для такого рода вещей? `g () `работает идентично и, вероятно, даст (чуть-чуть) лучшую производительность. 00dani 7 лет назад 1
1
not2qubit

Don't alias "grep", better to alias "less" which is never used by shells. In your .bashrc just put: alias less="less -r".

Не совсем верно. Нужно использовать _both_ `grep --color = всегда` и` less -R`. Обратите внимание, что grep знает только, что он передается в какой-то другой процесс, и опция `--color = auto` использует исключительно эту информацию, чтобы решить, будут ли выводить цвета или нет. brandizzi 11 лет назад 3
Обратите внимание, что `less` опция` -r` отличается от `-R`. Вероятно, `-R` безопаснее. Craig McQueen 10 лет назад 3
Так почему бы отказаться от моего решения. ОП специально запрашивает `less` с примером, в котором уже используется опция --color. not2qubit 10 лет назад 1
Псевдоним здесь, вероятно, нежелателен. `less` поддерживает переменную окружения` $ LESS`. Таким образом, вместо псевдонима, `export LESS = '- R'` может быть предпочтительнее. greyfade 8 лет назад 3
0
Pierre François

Мне нужно бежать

grep --color=always -R "search string" * | less - r 

с флагом -r после less для запуска.