Подсветка синтаксиса / раскрашивание cat


есть ли способ раскрасить вывод cat, Так grep делает.

на grep, в большинстве консолей он отображает цветной вывод, выделяющий искомые ключевые слова. В противном случае, вы можете заставить его зовет grep --color Есть ли общий способ покрасить вывод любой программы в соответствии с вашим личным выбором.

насколько я понимаю, сама программа не несет ответственности за цвет. Он является оболочкой.

Я использую по умолчанию оболочка во FreeBSD 5.2.1, которая выглядит так, как будто она никогда не видела цвета с эпохи.

15 148

15 ответов:

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

вот пример скрипта, который будет выбирать цвет в зависимости от типа файла (вы можете использовать что-то вроде этого вместо вызова cat напрямую):

#!/bin/bash
fileType="$(file "" | grep -o 'text')"
if [ "$fileType" == 'text' ]; then
    echo -en "3[1m"
else
    echo -en "3[31m"
fi
cat 
echo -en "3[0m"

выше (на a терминал, который поддерживает эти escape-последовательности) будет печатать любой текстовый файл как "полужирный", и будет печатать любой двоичный файл как красный. Вы можете использовать strings вместо cat для печати двоичных файлов, и вы можете улучшить логику, чтобы сделать его в соответствии с вашими потребностями.

Я бы рекомендовал pygmentize из пакета python python-pygments. Вы можете определить следующий удобный псевдоним (если вы не используете ccat из пакета ccrypt).

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

и если вы хотите, чтобы номера строк:

alias ccat='pygmentize -g -O style=colorful,linenos=1'

варианты:

pygmentize - это хорошо. У меня есть псевдоним:

alias c='pygmentize -g'

но выделить еще одна широко доступная альтернатива -

alias cats='highlight -O ansi --force'

установка:

установка pygments использование:

sudo pip install pygments
sudo easy_install Pygments #for Mac user

и highlight пакет, который легко доступен во всех дистрибутивах

sudo apt-get install highlight
sudo yum install highlight

Действие:

я прикрепляю снимки для обоих ниже для хорошего сравнения в подсветках

здесь pygmentize в действии: Pygmentize highlighting on python file

и highlight: Highlight highlighting on python file

инструмент, который вы ищете, вероятно,supercat (здесь краткое введение опубликовано Linux Journal).

Я понимаю, что этот ответ запоздал, и что он не полностью соответствует требованиям OP. Поэтому я добавляю его только для справки (это может быть полезно для других людей, которые ищут, как раскрасить вывод текстового файла).

vimcat является однофайловым (сценарий оболочки) и работает хорошо:

http://www.vim.org/scripts/script.php?script_id=4325

последнее обновление с декабря 2013 года. Подсказка: вы можете принудительно распознавать типы файлов с помощью vimcat -c "set ft=<type>".

есть раскрашенная версия cat -ccat. Получить его от https://github.com/jingweno/ccat/.

установка на Linux / Windows / macOS

это один автономный исполняемый файл, поэтому для его установки вы можете распаковать двоичную версию для вашей ОС из https://github.com/jingweno/ccat/releases и скопируйте ccat двоичном, например,/usr/local/bin.

если вы хотите избежать двоичных файлов, или если для вашей платформы нет двоичного файла (например, raspberry pi и т. д.), то вы можете поочередно компилировать из исходного кода, учитывая, что у вас есть рабочий go среда разработки (apt install golang на линуксах на основе debian или brew install golang на mac):

go get -u github.com/jingweno/ccat

The ccat двоичный файл будет создан под ваш $GOPATH/bin.

установка на Mac через homebrew

brew install ccat

псевдоним cat

для того чтобы заменить обычный cat С ccat добавить в ~/.bashrc:

alias cat="ccat $*"
alias cat0="/bin/cat $*" # for cases when you need plain `cat`

ccat реализуется в перейти, так что это родной двоичный файл, который работает намного быстрее, чем решения на основе Python, такие как одном модуль за pygmentize, я не вижу никакой заметной разницы в скорости между cat и ccat.

лучший способ и самый простой способ сделать это, если у вас есть vim в вашей машине, чтобы использовать vimcat которой входит

source-highlight

может быть, можно найти интересные source-highlightвыпущен под GNU: пакет отличается от highlight.

фрагмент apt-cache show source-highlight:

описание-Эн: преобразование исходного кода в синтаксис выделенного документа.
Эта программа, учитывая исходный файл, создает документ с синтаксисом подсветка.
он поддерживает подсветку синтаксиса для более чем 100 файл форматы ...
Для вывода поддерживаются следующие форматы: HTML, XHTML, LaTeX, Texinfo,ANSI цвет escape-последовательности, и DocBook

Я сделал некоторый псевдоним (Cat и PCat, см. ниже), и это их выход

Screen Example

вы можете установить на Debian с

sudo apt-get install source-highlight

и добавить его в качестве псевдонима например, в .bash_aliases С чем-то вроде строки ниже.

alias Cat='source-highlight --out-format=esc -o STDOUT -i'  
Cat myfile.c # or myfile.xml ...

или вы можете сделать подобный псевдоним (без -iв конце концов, чтобы иметь возможность трубы)

alias PCat='source-highlight --out-format=esc -o STDOUT '
tail myfile.sh | PCat     # Note the absence of the `-i`

среди вариантов, которые можно прочитать от man source-highlight the -s подчеркивает, что можно выбрать, или силу, подсветка командной строкой или оставить программе эту обязанность:

- s, -- src-lang=строка исходного текста (использование --Ланг-список получить полный список). если не указано, то исходный язык будет угадан из расширения файла.

--lang-list список всех поддерживаемых языков и связанных с ними файлов определения языка

с конца апреля 2018 года:

Bat - клон cat(1) с подсветкой синтаксиса и интеграцией Git.

проект представляет собой клон кошки с поддержкой цветов и настроек, написанных в Rust. Он предлагает не только подсветку синтаксиса с несколькими темами, но и интеграцию Git. Как описано в документации:

bat пытается достичь следующих целей:

  • обеспечить красивую, расширенную подсветку синтаксиса
  • интеграция с Git, чтобы показать изменения файла
  • будьте падени-в замене для (POSIX) cat
  • предлагаем удобный интерфейс командной строки

Это, само собой разумеется, гораздо быстрее, чем пигментируют и не задыхается при столкновении с большими файлами.

исходный код бинарные релизы + установка инструкции можно найти в репозитории GitHub, а также сравнение с альтернативными программами.

из того, что я понимаю, сам двоичный файл не отвечает за цвета. Он является оболочкой.

это не правильно. Терминал просто интерпретирует цветовые коды, которые выводятся на терминал. В зависимости от его возможностей он может игнорировать определенные коды форматирования/раскраски.

из man-страницы не кажется, что cat поддерживает окраску своего вывода. Даже если бы он поддерживал окраску, такую как grep, что он должен цветить в тексте файл? Подсветка синтаксиса требует знания базового языка, который не входит в сферу действия простой утилиты, такой как cat.

вы можете попробовать более мощные редакторы,такие как vim, emacs, gedit и т. д. На платформе unix, если ваша цель-увидеть выделенный код.

на OSX просто сделать brew install ccat.

https://github.com/jingweno/ccat. Как кошка, но отображает содержимое с подсветкой синтаксиса. Встроенный в Go.

старый вопрос, просто отвечая на запись, чтобы обеспечить решение, которое я в конечном итоге использовал. Возможно, это немного хаки (вероятно, не первоначальное намерение параметра), но:

псевдоним cgrep= 'grep-C 9000'

cat whatever / cgrep 'snozzberries'

..grep -C N предоставит N строк контекста выше и ниже найденного элемента. Если он больше, чем вход, весь вход включен. В этом случае, мы просто убедитесь, что он больше чем любой типичный вывод терминала, который мы хотим посмотреть вручную, что, как правило, то, что вы хотите сделать, если подсветка.

EDIT: однако это решение, предложенное ниже Бени Чернявским-Паскиным, превосходит - оно соответствует (и выделяет) либо слово, которое вы ищете, либо начало строки (не выделено). Конечный результат-это именно то, что вы хотите.

cat whatever | egrep 'snozzberries|$'

Это новое лучшее решение, которое я видел для этой проблемы, спасибо Беня.

в этом вопросе https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordin grcat/grc инструмент был рекомендован в качестве альтернативы supercat.

человек grc и grcat; это часть пакет grc (источник):

grc-интерфейс для универсального красителя grcat (1)

grcat - считывание со стандартного входа, раскрашивание и запись на стандартный выход

Я написал небольшой скрипт для выполнения колоризации с помощью pygmentize.

colorize_via_pygmentize() {
    if [ ! -x "$(which pygmentize)" ]; then
        echo "package \'Pygments\' is not installed!"
        return -1
    fi

    if [ $# -eq 0 ]; then
        pygmentize -g $@
    fi

    for FNAME in $@
    do
        filename=$(basename "$FNAME")
        lexer=`pygmentize -N \"$filename\"`
        if [ "Z$lexer" != "Ztext" ]; then
            pygmentize -l $lexer "$FNAME"
        else
            pygmentize -g "$FNAME"
        fi
    done
}

а затем сделать псевдоним для сценария. alias cat=colorize_via_pygmentize. Также не забудьте сохранить это в ~/.bashrc.

bat точно делает это и может быть сглажен до cat alias cat='bat'