Подсветка синтаксиса / раскрашивание 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'
и если вы хотите, чтобы номера строк:
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 РЕПО: 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
на
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, см. ниже), и это их выход
вы можете установить 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'