구문 강조 / 컬러링 고양이


202

출력을 채색하는 방법이 있습니까? cat 방법은, grep수행은.

의 경우 grep대부분의 콘솔에서 검색된 키워드를 강조 표시하는 컬러 출력을 표시합니다. 그렇지 않으면, 당신은 전화하여 강제로 할 수 있습니다grep --color 당신의 개인적인 선택에 따라 프로그램의 출력을 색칠하는 일반적인 방법이 있습니까?

내가 이해 한 바에 따르면, 프로그램 자체는 색상에 대한 책임이 없습니다. 껍질입니다.

나는 FreeBSD 5.2.1에서 기본 쉘을 사용하고 있는데, 그것은 시대 이후로 색을 본 적이없는 것처럼 보입니다.


나는 당신이 말하려는 것을 이해할 수 없습니다
Lelouch Lamperouge

아뇨 바이너리를 표시하고 싶지 않습니다. 바이너리의 출력을 채색 된 방식으로 표시하고 싶습니다.
Lelouch Lamperouge

6
meh-FTFY (언제든지 자신의 질문을 편집 할 수 있습니다)
sehe

나는 "이진"이라는 용어에 관한 혼란을 피하기 위해 편집했다
Volker Siegel

3
@buergi의 답변이 질문과 일치한다고 생각하며, 이것은 또한 많은 투표 수에 의해 뒷받침됩니다. 허용되는 답변을 변경해보십시오.
Ioannis Filippidis

답변:


22

cat구문 강조 표시는 단순히 범위를 벗어납니다. cat그런 의미가 아닙니다. 일부 파일의 전체 내용을 어떤 방식으로 (전체 파일에 대해 동일한 색상으로) 채색하려면 터미널 이스케이프 시퀀스를 사용하여 색상을 제어 할 수 있습니다.

파일 유형에 따라 색상을 선택하는 샘플 스크립트는 다음과 같습니다 ( cat직접 호출하는 대신 이와 같은 것을 사용할 수 있음).

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

위의 (이스케이프 시퀀스를 지원하는 터미널에서) 텍스트 파일을 'bold'로 인쇄하고 이진 파일을 빨간색으로 인쇄합니다. 이진 파일을 인쇄 하는 strings대신 사용할 수 있으며 cat필요에 맞게 논리를 향상시킬 수 있습니다.


나는 이와 같은 것을 생각하고 있었다. 그러나 보편적으로 할 일이 필요합니다. 뿐만 아니라 cat/ grep/any particular program
Lelouch Lamperouge

그런 다음 스크립트에 인수로 실행되도록 명령을 전달하고 하드 코딩 된 cat호출을 $cmd두 개의 인수가있는 경우 $ 1로 초기화되거나 일부가있는 경우 기본값으로 초기화 할 수 있습니다. 그런 다음 간단히 씁니다 colorful.sh grep file..
Costi Ciudatu

8
"고양이는 그런 의미가 아닙니다." Cat은 개별 파일을 표준 출력으로 작성하기위한 것이 아닙니다. 연결 용입니다. 그러나 이것이 여전히 개별 파일을 표준 출력에 쓰는 것이 유용하지 않다는 것을 의미하지는 않습니다. 그렇다고 강조 표시하는 것이 유용하지 않다는 의미는 아닙니다.
mikemaccana

cygwin pygmentize에서 채색 할 수 없습니다. 팁이 있습니까?
truthadjustr

407

pygmentize파이썬 패키지에서 추천 합니다 python-pygments. ccatccrypt 패키지에서 사용하지 않는 한 다음과 같은 편리한 별칭을 정의 할 수 있습니다 .

alias ccat='pygmentize -g'

pygmentize를 사용한 구문 강조 고양이 출력

그리고 줄 번호를 원한다면 :

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

22
또 다른 해결책은 linux highlight명령 을 사용하는 것 입니다. alias ccat='highlight -O ansi'
Evan Purkhiser

99
이것은 정답 IMHO이어야합니다. 그것에 덧붙여서, 나는 alias dog='pygmentize -g'개가 고양이보다 시원하기 때문에 로 별칭을 지정했습니다 !
polym

8
코드를 스크롤 할 수 있도록 -R을 더 적게 추가 할 수 있습니다.#!/bin/bash \n pygmentize -g $1 | less -R
Fabricio PH

6
나는 나의 별명을 불렀다 nyancat.
zneak

2
피그먼트는 예상대로 작동하지만 불행히도 다소 느려 보입니다. :-/
Frerich Raabe

113

옵션 :

피그 니 제이션 이 좋습니다. 별칭이 있습니다.

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실제로 적용되는 것입니다. 파이썬 파일에서 강조 표시 피그먼트

그리고 이것은 highlight: 파이썬 파일에서 강조 표시 강조


4
highlight내 요구에 잘 맞고 쉽게 설치할 수있었습니다. 확장자가없는 파일 (예 : .bash_aliases)을 보려면 추가 --syntax=bash하여 추가 -O ansi하십시오.
jerclarke

1
# pip install Pygments # echo "별칭 catc = 'pygmentize -g'">> "~ / .bashrc"# 터미널 닫기 # 터미널 열기 # catc test.js --- 및 완벽한 작품 :-) 😊
BG Bruno

3
highlight그 파이썬 프로그램보다 34 배 빠릅니다. 고전 언어의 힘은 강력합니다.
Avindra Goolcharan

2
의 경우 별칭 highlight에 추가 --force하려고합니다. 그렇지 않으면 알 수없는 파일 형식에 대해 오류가 발생하지만 cat대체 할 때는 강조 표시하지 않고 출력을 계속 표시하려고합니다 --force. alias cat="highlight -O ansi --force"
Alexander Klimetschek

1
@Luke -O ansi따라서 기본값을 추가 해야하는 이유 는 html :-)을 출력하는 것입니다.
Thomas

59

2018 년 4 월 말부터 :

Bat- 구문 강조 표시 및 Git 통합이 포함 된 cat (1) 클론.

이 프로젝트는 Rust로 작성된 색상 및 사용자 정의를 지원하는 고양이 복제품입니다. 여러 테마를 사용한 구문 강조뿐만 아니라 Git 통합도 제공합니다. 설명서에 설명 된대로 :

박쥐는 다음 목표를 달성하려고합니다 .

  • 아름다운 고급 구문 강조 기능 제공
  • 파일 수정을 보여주기 위해 Git과 통합
  • (POSIX) 고양이를 대체품으로 교체하십시오
  • 사용자에게 친숙한 명령 줄 인터페이스 제공

말할 필요도없이, 피그 니 제이션보다 훨씬 빠르며 큰 파일에 직면 할 때 질식하지 않습니다.

소스 코드 및 바이너리 릴리스 + 설치 지침 은 Github 리포지토리 및 대체 프로그램과 비교할 수 있습니다 .


5
사람들이 언급하지 않은 것은 bat기본적으로 대화식 모드로 유지 된다는 것 입니다. 더 비슷하게 동작 cat하려면 -pp인수 와 함께 사용하십시오 . 같은 별칭 alias cat="bat -pp"은 사람들이 찾고있는 것입니다.
넬라

1
나는 고양이를 채색하기 위해 pygmentize를 사용했지만, bat가있는 솔루션은 pygmentize 성능이 떨어지는 큰 파일 (몇 MB의 로그)에 훨씬 적합합니다.
Christian.D

34

vimcat 단일 파일 (쉘 스크립트)이며 잘 작동합니다.

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

마지막 업데이트는 2013 년 12 월입니다. 힌트 : 파일 형식을 강제로 인식 할 수 있습니다 vimcat -c "set ft=<type>".


12
vimcat (또는 vimpager)에 대해 정말 좋은 점 중 하나는 사용자가 정의한 색 구성표를 존중 ~/.vimrc하므로 편집 (vim) 또는 인쇄 (vimcat)하려는 경우 구문 강조 표시가 동일하다는 것입니다. vimcat의 업데이트 된 버전에서 찾을 수 있습니다 vimpager의 repositiory .
timss

Amaynut의 답변 은 더 오래되고 비슷합니다
olibre

vimpager내 vim colorscheme을 사용하지 않습니다.
WhyNotHugo

2
나의 비과학적인 빠른 테스트에서, vimcat(1 ~ 2 초 실행 시간)은 pymentize(~ 200ms)보다 훨씬 느리다. highlight(~ 20ms)보다 훨씬 느리다 cat(~ 2ms). 반면에, vimcat많은 파일 형식을 처리하고보다 정확 hightlight하고 pygmentize, 그리고 더 빨리 첫 번째에 비해 여전히 vim다음 :q. 이 특정 작업에 대한 내 선택을 얻습니다.
Penghe Geng

1
@olibre이 답변은 Amaynut의 답변보다 오래된 것 같습니다.
프랭클린 유

31

당신이 찾고있는 도구는 아마도 슈퍼 캣 일 것 입니다 (여기에 빠른 소개가 있습니다) Linux Journal에서 출판 한 ).

이 답변이 늦었으며 OP 요구 사항을 완전히 충족하지 못한다는 것을 알고 있습니다. 그래서 참조 용으로 추가하고 있습니다 (텍스트 파일 출력을 채색하는 방법을 찾는 다른 사람들에게 유용 할 수 있음).


1
이것은 내가 그것을 설치하고 예제 설정을 사용하지만, 어떤 색상 효과가 없었다, 그렇게 쉽게 작동하지 않는 것
rubo77

좋아, 다른 모든 것은 너무 느리다. 이거 좋다 구성에 대한 도움말은 manpages.debian.org/testing/supercat/spc.1.en.html
okovko

: 또한 다양한 언어에 대한 몇 가지 CONFIGS에 대한 github.com/tanderson92/supercat/tree/master/spcrc
okovko

20

cat- ccat 의 색상 버전이 있습니다. https://github.com/jingweno/ccat/ 에서 가져옵니다. .

Linux / Windows / macOS에 설치

단일 독립 실행 형 실행 파일이므로 설치하려면 https://github.com/jingweno/ccat/releases 에서 OS의 바이너리 버전을 풀고 ccat 바이너리를 복사하십시오./usr/local/bin .

바이너리를 피하거나 플랫폼에 바이너리가없는 경우 (예 : raspberry pi 등), go개발 환경 ( apt install golangdebian 기반 Linux 또는 brew install golangmac) 이있는 경우 소스에서 번갈아 컴파일 할 수 있습니다 .

go get -u github.com/jingweno/ccat

ccat진은 아래에 생성됩니다 $GOPATH/bin.

homebrew를 통해 Mac에 설치

brew install ccat

별칭 cat

일반 catccatadd in으로 바꾸려면 ~/.bashrc:

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

ccatGo 에서 구현 되므로 , 뒤에있는 모듈 인 pygments 와 같은 Python 기반 솔루션보다 훨씬 빠르게 실행되는 기본 바이너리입니다 pygmentize. cat와 사이에 눈에 띄는 속도 차이가 보이지 않았습니다 ccat.


1
올바른 레포 이름은 무엇입니까? Ubuntu 16의 apt-get ccat은 일종의 암호화 프로그램을 제공하며 현재 전체 proc 디렉토리를 암호화하거나 해독하려고 시도함에 따라 터미널을 약간 유쾌하게
비웃었습니다

@KatasticVoyage : 내 나쁜 점 : 어떤 이유로 든 repos에 있다고 가정하고 우분투 상자에 어떻게 넣었는지 잊었습니다. 업데이트 된 답변을 참조하십시오.
ccpizza

2
현재 brew install ccatbrew tap더 이상 필요없는 것 같습니다 .
Jeff Huijsmans

12

컴퓨터에 vim이있는 경우 가장 좋은 방법과 가장 쉬운 방법은 프로그램 vimcat과 함께 제공되는 것입니다 vimpager.

  1. 로 vimpage 설치 git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
  2. vimcat을 실행하십시오.

    vimcat index.html


나는 그 아이디어를 좋아하지만, vimcat은 여기에서 가장 느린 것들 중 하나입니다. 피그 네이 제이션만큼 느립니다. 내 컴퓨터의 30 줄 bash 스크립트 보다 15 배 느리고 highlight3 배 느립니다 bat.
Ponkadoodle

11

source-highlight

아마도 source-highlight GNU에서 릴리즈 된 흥미로운 것을 찾을 수있을 것입니다 :와 다른 패키지 highlight.

발췌 apt-cache show source-highlight:

Description-en : 소스 코드를 구문 강조 문서로 변환합니다.
소스 파일이 제공된이 프로그램은 구문 강조가 포함 된 문서를 생성합니다.
그것은 100 개 이상의 파일 형식에 대한 구문 강조를 지원합니다 ...
출력의 경우, 다음과 같은 형식이 지원됩니다 : HTML, XHTML, LaTeX의, Texinfo의, ANSI 컬러 이스케이프 시퀀스 와의 DocBook

나는 약간의 별칭 (Cat and PCat, 아래 참조)을 수행했으며 이것이 그들의 출력입니다.

화면 예

데비안 기반으로 설치할 수 있습니다

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 = STRING 소스 언어 (--lang-list를 사용하여 전체 목록을 얻음) 지정하지 않으면 파일 확장자에서 소스 언어를 추측합니다. .

--lang-list 지원되는 모든 언어 및 관련 언어 정의 파일을 나열합니다.


1
로 색상 less을 지정 하려면 GitHub의source-highlight 누군가가 다음 과 같은 대답을 제공합니다 . 사용할 수없고 설치할 수없는 경우에 매우 유용합니다 . export LESSOPEN="| source-highlight -f esc -i %s -o STDOUT"export LESS=" -R "pygmentize
Lalylulelo 2019

8

내가 이해 한 바에 따르면 바이너리 자체는 색상에 책임이 없습니다. 껍질입니다.

정확하지 않습니다. 터미널은 터미널로 출력되는 색상 코드 만 해석합니다. 기능에 따라 특정 형식 / 색상 코드를 무시할 수 있습니다.

매뉴얼 페이지에서 cat이 출력 색상을 지원하지 않는 것 같습니다. grep과 같은 색상을 지원해야하더라도 텍스트 파일에서 색상을 어떻게 지정해야합니까? 구문 강조는 고양이와 같은 간단한 유틸리티의 범위에 속하지 않는 기초 언어에 대한 지식이 필요했습니다.

강조 표시된 코드를 보는 것이 목표라면 유닉스 플랫폼에서 vim, emacs, gedit 등과 같은 더 강력한 편집기를 사용해 볼 수 있습니다.


3
" cat행 번호가있는 파일을 인쇄하기위한 것이 아니라 여러 개의 빈 줄을 압축하는 것이 아니라 비 인쇄 ASCII 문자를 보는 것이 아니라 파일을 연결하는 것입니다." – UNIX 스타일 또는 cat -v 고려 된 유해 .
Scott

7

OSX에서는 간단하게 수행하십시오 brew install ccat.

https://github.com/jingweno/ccat . 고양이와 비슷하지만 구문 강조 표시로 내용을 표시합니다. 내장되어 있습니다.


좋은. 언어 제한이 있지만 피그먼트보다 훨씬 빠릅니다.
구스타보 베 제라

ccat 은 Arch Linux의 AUR 저장소에서도 찾을 수 있습니다. yaourt 또는 pacaur를 사용하여 패키지를 설치하십시오.
Marcs


3

오래된 질문, 내가 사용한 솔루션을 제공하기 위해 레코드에 응답합니다. 아마도 이것은 약간 해키 (아마도 매개 변수의 원래 의도는 아님)이지만 다음과 같습니다.

별명 cgrep = 'grep -C 9000'

고양이 뭐든지 | cgrep 'snozzberries'

..grep -C N 찾은 항목 위와 아래에 N 줄의 컨텍스트를 제공합니다. 입력보다 큰 경우 전체 입력이 포함됩니다. 이 경우 수동으로 보려는 일반적인 터미널 출력보다 큰지 확인하십시오. 일반적으로 강조 표시 할 때 수행하려는 작업입니다.

편집 : 그러나 Beni Cherniavsky-Paskin이 제안한이 솔루션은 우수합니다. 찾고있는 단어 또는 줄의 시작과 일치합니다 (강조 표시하지 않음). 결과는 정확히 원하는 것입니다.

cat whatever | egrep 'snozzberries|$'

이것이 Beni 덕분에 그 문제에 대해 본 최고의 솔루션입니다.


2
모든 라인을 포함하면서 패턴을 강조하는보다 강력한 방법은 다음과 같습니다.egrep 'snozzberries|$'
Beni Cherniavsky-Paskin


1

나는를 사용하여 채색을 수행하는 작은 스크립트를 작성했습니다 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 에 저장하는 것을 잊지 마십시오 .


0

하나의 라이너로 cat출력을 주어진 색상 으로 설정 하려면 추가 할 수 있습니다

alias cat="echo -en 'code' | cat - "

너의 ~에게 ~/.$(basename $SHELL)rc

다음은 색상 코드가 포함 된 요점입니다. https://gist.github.com/chrisopedia/8754917

나는 '\e[1;93m'노란색으로 강한을 좋아한다 . 다음과 같이 보입니다 :여기에 이미지 설명을 입력하십시오


0

vim 과이 vimrc 파일을 사용 하십시오 .

짧막 한 농담:

vim -c '1' -c 'set cmdheight=1' -c 'set readonly' -c 'set nomodifiable' -c 'syntax enable' -c 'set guioptions=aiMr' -c 'nmap q :q!<CR>' -c 'nmap <Up> <C-Y>' -c 'nmap <Down> <C-E>' -c 'nmap ^V <C-F><C-G>' "$@" 

nano -v 대안이 될 수도 있습니다.


0

~ / .bashrc에 넣으십시오

function ccat() { docker run -it -v "$(pwd)":/workdir -w /workdir whalebrew/pygmentize $1; }

그때

ccat filename

Whalebrew 는 Docker 이미지의 별칭을 만들어 기본 명령처럼 실행할 수 있습니다. 그것은 Homebrew와 같지만 Docker 이미지가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.