Получение цветных результатов при использовании трубы от grep до менее
56581
Jeremy Powell
Я часто использую опцию --colour в grep, но часто я использую и меньше. Как я могу труба grep результаты, чтобы уменьшить и все же сохранить окраску. (Или это возможно?)
grep "search-string" -R * --colour | less
РЕДАКТИРОВАТЬ :
Я ищу прямое решение или что-нибудь эквивалентное этому.
возможный дубликат команды [Получить цвета в 'меньше' '] (http://superuser.com/questions/117841/get-colors-in-less-command)
Ciro Santilli 新疆改造中心 六四事件 法轮功 10 лет назад
0
Когда вы просто запускаете, 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