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

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

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

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

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

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

на ccat binary будет создан под вашим $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 реализуется в Go, поэтому это родной двоичный файл, который работает намного быстрее, чем решения на основе 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 на -s подчеркивает, что можно выбрать, или силу, подсветку командной строкой или оставить программе эту обязанность:

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

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


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

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

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

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

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

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

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


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

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

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

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


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

https://github.com/jingweno/ccat. Как cat, но отображает контент с подсветкой синтаксиса. Построен в ходу.


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

псевдоним 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 и.


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