Подсветка синтаксиса / раскрашивание 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
из пакета pythonpython-pygments
. Вы можете определить следующий удобный псевдоним (если вы не используетеccat
из пакета ccrypt).alias ccat='pygmentize -g'
и если вы хотите, чтобы номера строк:
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
- Bitbucket repo: https://bitbucket.org/birkenfeld/pygments-main
- GitHub зеркало:https://github.com/sglyon/pygments
Действие:
я прикрепляю снимки для обоих ниже для хорошего сравнения в подсветках
здесь
pygmentize
в действии:и
highlight
:
инструмент, который вы ищете, вероятно,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, см. ниже), и это их выход
вы можете установить на 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'