dront78 03.11.2012 08:05

Tips & tricksЦветные грепы

Чтобы цвет не терялся после фильтрации в пайпе, пишем unbuffer перед командой
1
unbuffer ls -al --color | grep <pattern>

однако могут быть глюки - можно погрепать управляющие коды цветов ;)

ЗЫ:
unbuffer составляющая пакета expect


Тэги: color grep pipe
+ 4 -
Похожие Поделиться

ananas 03.11.2012 11:59 #
man stdbuf. и никаких тебе tcl, только coreutils
dront78 03.11.2012 16:02 #
а теперь рабочий пример в студию
maksimrussia 03.11.2012 17:52 #
Лучше напиши, когда это всё-таки пригодится, а то у меня
1
2
ls -a --color | grep --color=none Web
Webcam



И без всяких трюков отлично сохраняет цвет.
dront78 03.11.2012 21:15 #
цвет где? если цвет grep - то конечно
а расцветку ls да и других "цветных" комманд?
а то вы все понтуетесь - почитай man, "и так работает" а объяснить ничего не можете :D
sKwa 04.11.2012 11:20 #
не будь таким агрессивным, он как раз не понтуется. "И так работает" - значит, что: либо некоторых дистрах это настроенно по умолчанию; либо ты почесал левое ухо через правое колено со своим unbuffer и непроверив: "Авось опция --color и у твоего дистра работает?".

PS: Я проверил 4 дистрибутива: Убунту, Сусе, Федору и ЦентОС - везде работает.
CentOS 6.3
dront78 04.11.2012 16:45 #
> либо ты почесал левое ухо через правое колено со своим unbuffer и непроверив: "Авось опция --color и у твоего дистра работает?".

ну спасибо )) а теперь подумай что не все имеют опцию --color и unbuffer тут очень даже помогает

ЗЫ
и с чего ты взял про агрессивность? привязались к семплу, хотя речь об универсальной тулзе
maksimrussia 05.11.2012 14:05 #
Мда? А если опции --color/--no-color или подобного нет, то логично предположить, что тулза не генерирует цветной вывод из чего логично предположить, что никаких сторонни тулз для сохранения цвета между пайпами не нужно, откуда также логично возникает вопрос - покажи случаи использования того инструмента, который ты предложил.
dront78 05.11.2012 14:28 #
yaourt -Ss nvidia | grep --color=none xf86

не работает
kstep 05.11.2012 21:39 #
yaourt --color -Ss nvidia | grep --color=none xf86

Прекрасно себе работает. Дело в yaourt-е: если он определяет, что вывод ведётся не на консоль, то отключает цвет, если иного не задано в опцией --color явно.
sKwa 06.11.2012 02:40 #
1. "и с чего ты взял про агрессивность?"
Возможно я не прав, но в словах "а то вы все понтуетесь..., а объяснить ничего не можете :D" увидел нападок.

2. " привязались к семплу, хотя речь об универсальной тулзе"
Во-во, вот речь-то как раз об этом - ты просто используешь утилиту не по назначению. Дай попробую объяснить.

Цитирую: "Чтобы цвет не терялся после фильтрации в пайпе, пишем unbuffer перед командой".

Таким образом мы отказываемся от буфферизации данных, что влечет за собой по-байтовое чтение, для сохранения цвета.
Текстовая раскраска - это лишь escape-последовательности и видимо без буфферизации grep не имеет возможности перезаписывать свои escape-последовательности при совпадении паттерна, так как чтение по-байтовое(IMHO - не проверил).
А вот если ты удалишь alias на grep, что говорит ему раскрашивать вывод, то и после pipe раскраску получишь.
рабочий пример(рабочий пример)

>> "а теперь подумай что не все имеют опцию --color"
Промах - не мой, не твой, а разработчика утилиты. Согласись: глупо создавать консольную(TUI, CLI) утилиту с цветом в выводе без предоставления опции для включения или выключения :))) Просто кто-то поленился :-)
dront78 06.11.2012 13:40 #
спорить не буду, не согласен лишь с тем, что промах есть вообще. да и не в грепах дело тут. с помощью unbuffer есть возможность "обмануть" программу, даже если она тупая. ведь есть еще миллион тулзов кроме грепа
sKwa 06.11.2012 02:50 #
PS:
поэтому срабатывала `grep --color=none` во всех примерах, а не `ls --color`.
у многих просто стоит alias на подсветку совпадения для grep. :)
maksimrussia 05.11.2012 14:08 #
Пример с ls'ом вместе со скриншотом, ты можешь узреть ниже, в касетче примера "других цветных команд" я привёл grc
maksimrussia 03.11.2012 17:53 #
и даже grc cat log | grep --color=none something прекрасно работает
ananas 04.11.2012 18:59 #
рабочий пример чего? флашинга буферов? так их и в манах имеется