команда "виділити"


11

Чи є команда, за допомогою якої можна легко виділити (кольорами, жирним текстом або перевернутим задньою / передньою поверхнею) конкретні рядки в stdin, передаючи всю строку stdout? Я думаю будувати його , але краще скористатись ним, якщо він уже існує. Деякі бажані функції:

  1. Окремі рядки висвітлення виділяються по-різному, автоматично. Наприклад, перший рядок буде виділений червоним кольором, другий зеленим, третій синім кольором без ручної настройки .
  2. Виявляє підтримку кольорів і повертається до жирних / перевернутих / інших методів виділення, коли вони доступні.
  3. Дозволити для узгодження регулярних виразів і буквальних рядків.
  4. Переважно робити щось розумне, якщо сірники перекриваються, наприклад, "foobar" і "barbar".
  5. Нічого не змінюється між stdin та stdout, крім додавання кольорових кодів.


Ооо, добре запитання. Мені потрібна була ця точна річ і я щось писав, але це лише кольорові фіксовані рядки, вона не мала жодної з перелічених вами функцій
Michael Mrozek

Замість того, щоб писати нову утиліту, було б надзвичайно приємно бачити це як доповнення до себе.
mattdm

1
Правильна філософія Unix була б новою утилітою, яка може проходити не тільки від grep, але й з інших потоків. Я підозрюю, що є хоча б один або кілька модулів Perl, які, ймовірно, можуть зробити це для вас, хоча ...
Shadur

1
@Gilles: Це питання набагато обмежений за обсягом. Насправді її читання було однією з причин, що я створив це питання - Запросити більш загальне та гнучкіше рішення.
l0b0

Відповіді:


4

Може бути , Загальний колорист Радована Гарабіка (grc) ? Він очікує конфігураційний файл як аргумент і працює з regexp. Так що не зовсім без конфігурації, але ви можете використовувати процедуру заміни процесу ( <(list)), так що всі засоби без ручної конфігурації :-)


Щоб уточнити, не потрібно відкривати сторінку (і робити її пошуковою), "ця" == Загальний колоризатор ; grc та grcat ... Спасибі, мені це подобається.
Пітер.О

grcмає допоміжний скрипт: grcat. Ось приклад фарбування всіх великих літер в червоний колір. Крок 1: Налаштування конфігураційного файлу: printf "regexp=[A-Z]\ncolours=red\n" > ~/.grc/red-caps Крок 2; Використовуйте його: echo Hello World | grcat red-caps... Сторінка man вказує 3 конфігураційні каталоги, які він шукає, а потім пропонує (?), Що файл config може бути абсолютним шляхом, але цей останній спосіб пошуку конфігураційного файлу працює лише для мене відносними шляхами (grc версія 1.3)
Peter.O

5

Сід на допомогу!

Ви можете вдосконалити це (як це дійсно потрібно), але воно працює досить добре.

$ cat >~/bin/hilight <<EOF
#!/bin/bash
while [ $# -gt 0 ]
do
 COMANDO=$COMANDO's/'$1$'/\033[01;'$2$'m\033[K\\0\033[m\033[K/g\n'
 shift;shift;
done

sed -e "$COMANDO"
EOF

Для простоти hilight приймає пару аргументів (перший матч, другий колір) У цьому сценарії attrib завжди є жирним

Прочитайте man console_codes (Графічне видання), щоб побачити кольори кольорів, або спробуйте це

for attrib in $(seq 0 12); do
  for color in $(seq 30 37) $(seq 40 47) $(seq 90 97); do
    printf %b " $attrib $color:\033[$attrib;${color}mhi, dudes\033[m"
  done
done

Він має важливі недоліки, оскільки це працює:

$ dmesg | hilight \\[ 34 ] 34

але це зовсім не так:

$ dmesg | hilight \\[ 34 ] 34 [[:digit:]] 31

тому що [: цифра:] знаходить числа в евакуаційній послідовності попередніх супозицій.

Щось на зразок:

$ cat /var/log/kern.log | hilight kernel 31 a 34 et 33

завжди працюватиме як виключений.

Використовуючи команду time, я виявив цей приріст на чотири минулих часу, що не дуже багато.

Ви можете замінити команду sed будь-яким іншим аналізатором, який вам подобається або відповідає вашим потребам (awk, тощо).


2

Можна також використовувати egrep з малюнком, який відповідає кожному рядку символу, що не друкується, наприклад:

dmesg | egrep --color "swap|$"

1

клід працює чудово. Я використовую його на RHEL 6.2, із сховища EPEL


+1 за дуже приємний інструмент. На жаль, він не має всіх необхідних функцій.
l0b0

1

Якщо ваша версія grepпоставляється з кольоровим кольором, ви можете використовувати зміни в регулярному вираженні, щоб гріп виділити текст, а також відповідати кожному рядку, так що нічого не виключається. Слід виконати трюк:

<your command> |grep "highlightme\|^"

0

Як ви згадували у посиланні, grep --color=alwaysпрацює лише для одного шаблону. Однак, я не вірю, що такий інструмент існує.


0

Я використовую http://em.readthedocs.org/ . Простий в установці на різних платформах через Python. Простий і чудово працює.


Ласкаво просимо до Unix & Linux Stack Exchange! Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
slm

1
За інформацією довідкового центру : "Однак ви повинні розкрити свою приналежність у своїх відповідях". Якщо ви той самий Ігор Кальницький, який писав em, будь ласка, переформулюйте свою відповідь, щоб було зрозуміло, що ви не користувач, а автор запропонованого інструменту.
манатурка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.