dront78 03.11.2012 08:05
Tips & tricks — Цветные грепы
Чтобы цвет не терялся после фильтрации в пайпе, пишем unbuffer перед командой
1 |
|
ЗЫ:
unbuffer составляющая пакета expect
ananas 03.11.2012 11:59 #
+ 1 -
man stdbuf. и никаких тебе tcl, только coreutils
цвет где? если цвет grep - то конечно
а расцветку ls да и других "цветных" комманд?
а то вы все понтуетесь - почитай man, "и так работает" а объяснить ничего не можете :D
а расцветку ls да и других "цветных" комманд?
а то вы все понтуетесь - почитай man, "и так работает" а объяснить ничего не можете :D
не будь таким агрессивным, он как раз не понтуется. "И так работает" - значит, что: либо некоторых дистрах это настроенно по умолчанию; либо ты почесал левое ухо через правое колено со своим unbuffer и непроверив: "Авось опция --color и у твоего дистра работает?".
PS: Я проверил 4 дистрибутива: Убунту, Сусе, Федору и ЦентОС - везде работает.
PS: Я проверил 4 дистрибутива: Убунту, Сусе, Федору и ЦентОС - везде работает.
> либо ты почесал левое ухо через правое колено со своим unbuffer и непроверив: "Авось опция --color и у твоего дистра работает?".
ну спасибо )) а теперь подумай что не все имеют опцию --color и unbuffer тут очень даже помогает
ЗЫ
и с чего ты взял про агрессивность? привязались к семплу, хотя речь об универсальной тулзе
ну спасибо )) а теперь подумай что не все имеют опцию --color и unbuffer тут очень даже помогает
ЗЫ
и с чего ты взял про агрессивность? привязались к семплу, хотя речь об универсальной тулзе
Мда? А если опции --color/--no-color или подобного нет, то логично предположить, что тулза не генерирует цветной вывод из чего логично предположить, что никаких сторонни тулз для сохранения цвета между пайпами не нужно, откуда также логично возникает вопрос - покажи случаи использования того инструмента, который ты предложил.
yaourt --color -Ss nvidia | grep --color=none xf86
Прекрасно себе работает. Дело в yaourt-е: если он определяет, что вывод ведётся не на консоль, то отключает цвет, если иного не задано в опцией --color явно.
Прекрасно себе работает. Дело в yaourt-е: если он определяет, что вывод ведётся не на консоль, то отключает цвет, если иного не задано в опцией --color явно.
1. "и с чего ты взял про агрессивность?"
Возможно я не прав, но в словах "а то вы все понтуетесь..., а объяснить ничего не можете :D" увидел нападок.
2. " привязались к семплу, хотя речь об универсальной тулзе"
Во-во, вот речь-то как раз об этом - ты просто используешь утилиту не по назначению. Дай попробую объяснить.
Цитирую: "Чтобы цвет не терялся после фильтрации в пайпе, пишем unbuffer перед командой".
Таким образом мы отказываемся от буфферизации данных, что влечет за собой по-байтовое чтение, для сохранения цвета.
Текстовая раскраска - это лишь escape-последовательности и видимо без буфферизации grep не имеет возможности перезаписывать свои escape-последовательности при совпадении паттерна, так как чтение по-байтовое(IMHO - не проверил).
А вот если ты удалишь alias на grep, что говорит ему раскрашивать вывод, то и после pipe раскраску получишь.
(рабочий пример)
>> "а теперь подумай что не все имеют опцию --color"
Промах - не мой, не твой, а разработчика утилиты. Согласись: глупо создавать консольную(TUI, CLI) утилиту с цветом в выводе без предоставления опции для включения или выключения :))) Просто кто-то поленился :-)
Возможно я не прав, но в словах "а то вы все понтуетесь..., а объяснить ничего не можете :D" увидел нападок.
2. " привязались к семплу, хотя речь об универсальной тулзе"
Во-во, вот речь-то как раз об этом - ты просто используешь утилиту не по назначению. Дай попробую объяснить.
Цитирую: "Чтобы цвет не терялся после фильтрации в пайпе, пишем unbuffer перед командой".
Таким образом мы отказываемся от буфферизации данных, что влечет за собой по-байтовое чтение, для сохранения цвета.
Текстовая раскраска - это лишь escape-последовательности и видимо без буфферизации grep не имеет возможности перезаписывать свои escape-последовательности при совпадении паттерна, так как чтение по-байтовое(IMHO - не проверил).
А вот если ты удалишь alias на grep, что говорит ему раскрашивать вывод, то и после pipe раскраску получишь.
(рабочий пример)
>> "а теперь подумай что не все имеют опцию --color"
Промах - не мой, не твой, а разработчика утилиты. Согласись: глупо создавать консольную(TUI, CLI) утилиту с цветом в выводе без предоставления опции для включения или выключения :))) Просто кто-то поленился :-)
спорить не буду, не согласен лишь с тем, что промах есть вообще. да и не в грепах дело тут. с помощью unbuffer есть возможность "обмануть" программу, даже если она тупая. ведь есть еще миллион тулзов кроме грепа
PS:
поэтому срабатывала `grep --color=none` во всех примерах, а не `ls --color`.
у многих просто стоит alias на подсветку совпадения для grep. :)
поэтому срабатывала `grep --color=none` во всех примерах, а не `ls --color`.
у многих просто стоит alias на подсветку совпадения для grep. :)
Пример с ls'ом вместе со скриншотом, ты можешь узреть ниже, в касетче примера "других цветных команд" я привёл grc
и даже grc cat log | grep --color=none something прекрасно работает