Podświetlanie składni / koloryzacja kota

Czy istnieje metoda kolorowania wyjścia cat, tak jak robi to grep.

Dla grep, w większości konsol wyświetla kolorowe wyjście podkreślające wyszukiwane słowa kluczowe. W przeciwnym razie możesz wymusić wywołanie grep --color Czy istnieje ogólny sposób na pokolorowanie wyjścia dowolnego programu zgodnie z osobistym wyborem.

Z tego co rozumiem, sam program nie jest odpowiedzialny za Kolory. To skorupa.

Używam domyślnej powłoki we FreeBSD 5.2.1 która wygląda jakby nigdy nie widział kolorów od epoki.

Author: Volker Siegel, 2011-10-21

15 answers

cat podświetlanie składni jest po prostu poza zakresem. Nie jest do tego przeznaczona. Jeśli chcesz, aby cała zawartość jakiegoś pliku była w jakiś sposób zabarwiona (z tym samym kolorem dla całego pliku), możesz użyć sekwencji specjalnych terminala do kontrolowania koloru.

Oto przykładowy skrypt, który wybierze kolor na podstawie typu pliku (możesz użyć czegoś takiego zamiast bezpośrednio wywoływać 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"

Powyżej (na terminalu obsługującym te sekwencje specjalne) wydrukuje dowolny plik tekstowy jako "pogrubienie", A dowolny plik binarny jako czerwony. Możesz użyć strings zamiast cat do drukowania plików binarnych i możesz poprawić logikę, aby dopasować ją do swoich potrzeb.

 17
Author: Costi Ciudatu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 22:03:41

Polecam pygmentize z pakietu Pythona python-pygments. Możesz chcieć zdefiniować następujący przydatny alias (chyba że użyjesz ccat z pakietu ccrypt).

alias ccat='pygmentize -g'

Składnia podświetlona wyjście cat za pomocą pygmentize

I jeśli chcesz numery linii:

alias ccat='pygmentize -g -O style=colorful,linenos=1'
 347
Author: buergi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-15 06:30:35

Opcje:

Pygmentize jest dobry. Mam pseudonim:

alias c='pygmentize -g'

Ale podświetlenie jest inną powszechnie dostępną alternatywą

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

Instalacja:

Być może będziesz musiał zainstalować pygments używając:

sudo pip install pygments
sudo easy_install Pygments #for Mac user

I dla highlight pakietu, który jest łatwo dostępny na wszystkich dystrybucjach

sudo apt-get install highlight
sudo yum install highlight

W Akcji:

Dołączam zdjęcia dla obu poniżej dla dobrego porównania w highlightings

Oto pygmentize w akcji: Podświetlanie Pygmentize na pliku Pythona

A to jest highlight: Podświetlenie podświetlenia na pliku Pythona

 93
Author: Shubham Chaudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 11:40:54

Narzędzie, którego szukasz, to prawdopodobnie supercat (Oto szybkie wprowadzenie opublikowane przez Linux Journal).

Zdaję sobie sprawę, że ta odpowiedź jest spóźniona i że nie spełnia w pełni wymagań OP. Więc dodaję go tylko w celach informacyjnych (może być przydatny dla innych osób szukających sposobu kolorowania wyjścia pliku tekstowego).

 30
Author: mfriedman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-06 05:03:32

vimcat jest pojedynczym plikiem (skrypt powłoki) i działa dobrze:

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

Ostatnia aktualizacja pochodzi z grudnia 2013. Podpowiedź: możesz wymusić rozpoznawanie typu pliku przez vimcat -c "set ft=<type>".

 28
Author: Soergener,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-26 14:30:08

Istnieje kolorowa wersja cat - ccat . Get it from https://github.com/jingweno/ccat/.

Instalacja na Linuksie/Windows / macOS

Jest to pojedynczy samodzielny program wykonywalny, więc aby go zainstalować, możesz rozpakować wersję binarną dla swojego systemu operacyjnego z https://github.com/jingweno/ccat/releases i skopiować ccat na przykład do /usr/local/bin.

Jeśli chcesz uniknąć plików binarnych, lub jeśli nie ma binarnych dla Twojej platformy (np. raspberry pi, itp.), Następnie można na przemian skompilować ze źródła, biorąc pod uwagę, że masz działający go środowisko programistyczne (apt install golang na Linuksach opartych na Debianie lub brew install golang na mac):

go get -u github.com/jingweno/ccat

ccat plik binarny zostanie utworzony pod twoim $GOPATH/bin.

Instalacja na Macu przez homebrew

brew install ccat

Alias do cat

Aby zastąpić zwykłe cat przez ccat dodaj ~/.bashrc:

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

ccat jest zaimplementowany w Go , więc jest to natywny binarny, który działa znacznie szybciej niż rozwiązania oparte na Pythonie, takie jak pygments , moduł stojący za pygmentize; nie zauważyłem zauważalnej różnicy prędkości pomiędzy cat i ccat.

 18
Author: ccpizza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 21:27:39

Najlepszym i najłatwiejszym sposobem na zrobienie tego, jeśli masz Vima w swojej maszynie, jest użycie vimcat, który jest dostarczany z vimpager programem.

  1. Zainstaluj vimpage z git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
  2. Uruchom vimcat:

    vimcat index.html

 11
Author: Amaynut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 17:33:27

source-highlight

Może uda się znaleźć interesujące source-highlight wydany pod GNU : pakiet inny niż highlight.

Fragment z apt-cache show source-highlight:

Description-en: konwersja kodu źródłowego na podświetlony dokument składni.
Ten program, biorąc pod uwagę plik źródłowy, tworzy dokument ze składnią podświetlenie.
obsługuje podświetlanie składni dla ponad 100 formatów plików ...
Dla wyjścia, następujące formaty są obsługiwane: HTML, XHTML, LaTeX, Texinfo, sekwencje ucieczki kolorów ANSI i DocBook

Zrobiłem jakiś alias (Cat i PCat, patrz poniżej) i to jest ich wyjście

Przykład Ekranu

Możesz zainstalować na Debianie za pomocą

sudo apt-get install source-highlight

I dodaj go jako alias np. w swoim {[7] } z czymś takim jak linia poniżej.

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

Lub możesz zrobić podobny alias (Bez -i na końcu, aby mieć możliwość rury w )

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

Wśród opcji, które można odczytać z man source-highlight-s podkreślenia, które można wybrać, lub wymusić , podkreślenie za pomocą linii poleceń lub pozostawić programowi to zadanie:

-s, --src-lang =STRING source language(użyj --Lang-list, aby uzyskać pełną listę). Jeśli nie podano, język źródłowy zostanie odgadnięty z rozszerzenia pliku .

--Lang-list lista wszystkich obsługiwanych języków i powiązanych plików definicji języka

 10
Author: Hastur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-08 14:51:04

Od końca kwietnia 2018 r.:

Bat - Klon cat(1) z podświetleniem składni i integracją z Git.

Projekt jest klonem kota z obsługą kolorów i dostosowań napisanych w Rust. Oferuje nie tylko podświetlanie składni z wieloma motywami, ale także integrację z Git. Zgodnie z opisem w dokumentacji:

bat stara się osiągnąć następujące cele :

  • Zapewnij piękną, zaawansowaną składnię podkreślenie
  • Zintegruj z Gitem, aby pokazać modyfikacje plików
  • W tym celu należy wykonać następujące czynności:]}
  • oferują przyjazny dla użytkownika interfejs wiersza poleceń

Jest, nie trzeba dodawać, znacznie szybszy niż pygmentize i nie dławi się w konfrontacji z dużymi plikami.

Kod źródłowy i wydania binarne + instrukcje instalacji można znaleźć w repozytorium Github, a także porównanie do alternatywy programy .

 9
Author: dangom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-16 08:42:34

Z tego co rozumiem, sam binarny nie jest odpowiedzialny za Kolory. To skorupa.

To nie jest poprawne. Terminal po prostu interpretuje kody kolorów, które są wysyłane do terminala. W zależności od jego możliwości może ignorować pewne kody formatowania/kolorowania.

Ze strony man nie wygląda na to, że cat obsługuje kolorowanie swoich danych wyjściowych. Nawet jeśli miałby obsługiwać kolorowanie takie jak grep, co powinien kolorować w pliku tekstowym? Podświetlanie składni wymagana znajomość języka bazowego, który nie wchodzi w zakres prostych narzędzi, takich jak cat.

Możesz wypróbować bardziej wydajne edytory, takie jak vim, emacs, gedit itp. na platformie unix, jeśli zobaczenie podświetlonego kodu jest twoim celem.

 8
Author: Ashwinee K Jha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-21 21:31:36

Na OSX wystarczy zrobić brew install ccat.

Https://github.com/jingweno/ccat. podobnie jak cat, ale wyświetla zawartość z podświetleniem składni. Wbudowany Go.

 7
Author: joost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-15 07:35:53

Stare pytanie, tylko odpowiadam na nagranie, aby dostarczyć rozwiązanie, z którego skorzystałem. Być może jest to trochę chwiejne (prawdopodobnie nie jest to pierwotna intencja parametru), ale:

alias cgrep= 'grep-C 9000'

Cat whatever / cgrep 'snozzberries'

..grep -C N dostarczy N wierszy kontekstu powyżej i poniżej znalezionego elementu. Jeśli jest większy niż wejście, całe wejście jest włączone. W tym przypadku po prostu upewniamy się, że jest większy niż jakiekolwiek typowe wyjście terminala będziemy chcieli przyjrzeć się ręcznie, co zazwyczaj jest tym, co chcesz zrobić, jeśli podświetlanie.

EDIT: Jednak To rozwiązanie zaproponowane poniżej przez Beni Czerniawskiego-Paskina jest lepsze - pasuje (i podkreśla) albo słowo, którego szukasz, albo początek linii (nie można wyróżnić). Wynik netto jest dokładnie tym, czego chcesz.

cat whatever | egrep 'snozzberries|$'

To nowe najlepsze rozwiązanie, jakie widziałem na ten problem, dzięki Beni.

 3
Author: Mr. B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-20 21:06:51

W tym pytaniu https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordin grcat/grc Narzędzie zostało zalecane jako alternatywa dla supercat.

Człowiek z grc i z grcat; jest częścią pakietu grc (źródła):

Grc-frontend dla generic colouriser grcat (1)

Grcat-odczyt ze standardowego wejścia, kolorowanie i zapis do standardowego wyjście

 2
Author: osgx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-21 20:06:15

Napisałem mały skrypt do wykonywania kolorowania za pomocą 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
}

A następnie utworzyć alias do skryptu. alias cat=colorize_via_pygmentize. Nie zapomnij też zapisać tego w ~/.bashrc .

 0
Author: Rohit Sehgal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-15 05:20:24

Bat dokładnie to robi i może być aliasowany do cat alias cat='bat'

 0
Author: Sailendra Pinupolu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 02:25:18