it-swarm.com.de

Syntax-Hervorhebung/Einfärbung der Katze

Gibt es eine Methode zum Einfärben der Ausgabe von cat, so wie grep dies tut.

Bei grep wird in den meisten Konsolen eine farbige Ausgabe angezeigt, die die gesuchten Schlüsselwörter hervorhebt. Andernfalls können Sie es erzwingen, indem Sie grep --color aufrufen. Gibt es eine generische Methode, um die Ausgabe eines Programms nach Ihrer persönlichen Wahl zu färben.

Nach meinem Verständnis ist das Programm selbst nicht für die Farben verantwortlich. Es ist die Schale. 

Ich verwende die Standard-Shell in FreeBSD 5.2.1, die so aussieht, als hätte sie seit der Epoche nie Farben gesehen.

162

cat mit Syntaxhervorhebung ist einfach außerhalb des Gültigkeitsbereichs. cat ist nicht dafür gedacht . Wenn Sie nur den gesamten Inhalt einer Datei (mit derselben Farbe für die gesamte Datei) färben möchten, können Sie die Escape-Sequenz des Terminals zur Steuerung der Farbe verwenden.

Hier ist ein Beispielskript, das die Farbe basierend auf dem Dateityp auswählt (Sie können etwas anderes verwenden, anstatt cat direkt aufzurufen):

#!/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"

Das obige Dokument (auf einem Terminal, das diese Escape-Sequenzen unterstützt) druckt jede Textdatei als 'fett' und jede Binärdatei als rot. Sie können strings anstelle von cat zum Drucken von Binärdateien verwenden, und Sie können die Logik verbessern, um sie an Ihre Anforderungen anzupassen.

23
Costi Ciudatu

Ich würde pygmentize aus dem Python-Paket python-pygments empfehlen. Sie können den folgenden praktischen Alias ​​definieren (es sei denn, Sie verwenden ccat aus dem ccrypt-Paket).

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

Und wenn Sie Zeilennummern wünschen:

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

Optionen:

pygementize ist gut. Ich habe einen Alias:

alias c='pygmentize -g'

aber highlight ist eine andere allgemein verfügbare Alternative

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

Installation:

Möglicherweise müssen Sie pygments mit folgendem Befehl installieren:

Sudo pip install pygments
Sudo easy_install Pygments #for Mac user

und für highlight-Paket, das auf allen Distributionen leicht verfügbar ist

Sudo apt-get install highlight
Sudo yum install highlight

In Aktion:

Ich füge unten für beide Aufnahmen hinzu, um einen guten Vergleich der Hervorhebungen zu ermöglichen

Hier ist pygmentize in Aktion: Pygmentize highlighting on python file

und dies ist highlight: Highlight highlighting on python file

100

Das Werkzeug, nach dem Sie suchen, ist wahrscheinlich supercat (hier ist eine kurze Einführung von Linux Journal veröffentlicht). 

Mir ist klar, dass diese Antwort zu spät ist und die OP-Anforderungen nicht vollständig erfüllt. Ich füge es also nur als Referenz hinzu (es könnte für andere Leute nützlich sein, die nach einer Möglichkeit suchen, wie man die Ausgabe von Textdateien einfärbt). 

31
mfriedman

vimcat ist eine einzelne Datei (Shell-Skript) und funktioniert gut:

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

Letzte Aktualisierung ist Dezember 2013. Hinweis: Sie können die Erkennung von Dateitypen mit vimcat -c "set ft=<type>" erzwingen.

29
Soergener

Ab Ende April 2018:

Bat - Ein cat (1) -Klon mit Syntaxhervorhebung und Git-Integration.

Das Projekt ist ein Katzenklon mit Unterstützung für Farben und Anpassungen in Rust. Es bietet nicht nur die Syntaxhervorhebung mit mehreren Designs, sondern auch die Integration von Git. Wie in der Dokumentation beschrieben:

bat versucht folgende Ziele zu erreichen:

  • Bietet schöne, erweiterte Syntax-Hervorhebungen
  • Integrieren Sie sich in Git, um Dateiänderungen anzuzeigen
  • Seien Sie ein Ersatz für (POSIX) cat
  • Bieten Sie eine benutzerfreundliche Befehlszeilenschnittstelle

Es ist unnötig zu sagen, dass es viel schneller als pygementize ist und nicht verschluckt, wenn es mit großen Dateien konfrontiert wird.

Quellcode und Binärversionen + Installationsanweisungen finden Sie im Github-Repository sowie einen Vergleich mit alternativen Programmen .

20
dangom

Es gibt eine eingefärbte Version von cat - ccat . Holen Sie es von https://github.com/jingweno/ccat/ .

Installation unter Linux/Windows/macOS

Es ist eine einzelne, eigenständige ausführbare Datei. Zur Installation können Sie die binäre Version für Ihr Betriebssystem von https://github.com/jingweno/ccat/releases entpacken und die Binärdatei ccat beispielsweise nach /usr/local/bin kopieren. . 

Wenn Sie Binärdateien vermeiden möchten oder wenn für Ihre Plattform keine Binärdatei vorhanden ist (z. B. Raspberry Pi usw.), können Sie alternativ vom Quellcode kompilieren, wenn Sie eine funktionierende go-Entwicklungsumgebung (apt install golang) auf Debian-Basis haben linuxes oder brew install golang auf mac):

go get -u github.com/jingweno/ccat

Die ccat-Binärdatei wird unter Ihrem $GOPATH/bin erstellt.

Installation auf dem Mac über Homebrew

brew install ccat

Alias ​​zu cat

Um reguläre cat durch ccat zu ersetzen, fügen Sie ~/.bashrc hinzu:

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

ccat ist in Go implementiert. Daher handelt es sich um eine native Binärdatei, die viel schneller als Python-basierte Lösungen ausgeführt wird, z. B. pygments , das Modul hinter pygmentize; Ich habe keinen merklichen Geschwindigkeitsunterschied zwischen cat und ccat gesehen.

19
ccpizza

Der beste Weg und der einfachste Weg, dies zu tun, wenn Sie vim in Ihrem Computer haben, ist die Verwendung von vimcat, das mit dem Programm vimpager geliefert wird.

  1. Vimpage mit git clone git://github.com/rkitover/vimpager cd vimpager Sudo make install installieren 
  2. Vimcat ausführen:

    vimcat index.html

11
Amaynut

source-highlight

Vielleicht ist es möglich, interessante source-highlightveröffentlicht unter GN : ein Paket anders als highlight zu finden.

Auszug aus apt-cache show source-highlight:

Description-de: Konvertiert den Quellcode in ein syntaktisch hervorgehobenes Dokument.
Dieses Programm erstellt anhand einer Quelldatei ein Dokument mit Syntaxhervorhebung.
Unterstützt Syntaxhervorhebung für über 100 Dateiformate ...
Für die Ausgabe werden die folgenden Formate unterstützt: HTML, XHTML, LaTeX, Texinfo, ANSI-Farbumbruchsequenzen und DocBook

Ich habe einen Alias ​​erstellt (Cat und PCat, siehe unten) und dies ist ihre Ausgabe

Screen Example

Sie können auf Debian basierend mit installieren

Sudo apt-get install source-highlight

und füge es als Alias ​​hinzu, z.B. in deinem .bash_aliases mit so etwas wie der folgenden Zeile.

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

Oder Sie können einen ähnlichen Alias ​​erstellen (ohne den -i Am Ende, um die Möglichkeit zu haben, Pipe in)

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

Unter den Optionen, die aus man source-highlight Gelesen werden können, unterstreicht das -s, das ausgewählt werden kann, oder force, das Hervorheben per Kommandozeile oder dem Programm überlassen diese Pflicht:

- s , - src-lang = STRING-Ausgangssprache (verwenden Sie --lang-Liste, um die vollständige Liste zu erhalten). Wenn nicht angegeben, wird die Ausgangssprache anhand der Dateierweiterung erraten.

--lang-list listet alle unterstützten Sprachen und zugehörigen Sprachdefinitionsdateien auf

11
Hastur

Nach meinem Verständnis ist die Binärdatei selbst nicht für die Farben verantwortlich. Es ist die Schale.

Das stimmt nicht. Das Terminal interpretiert nur die Farbcodes, die an das Terminal ausgegeben werden. Abhängig von seiner Fähigkeit kann er bestimmte Formatierungs-/Farbcodes ignorieren.

Von der Manpage scheint es nicht, dass die Katze die Ausgabe farbig unterstützt. Selbst wenn es die Farbgebung wie grep unterstützen würde, welche Farbe sollte es in der Textdatei haben? Syntax-Hervorhebungen erforderten die Kenntnis der zugrunde liegenden Sprache, die nicht im Rahmen eines einfachen Dienstprogramms wie cat ist.

Sie können leistungsfähigere Editoren wie vim, emacs, gedit usw. auf einer Unix-Plattform ausprobieren, wenn der Code hervorgehoben wird.

8
Ashwinee K Jha

Unter OSX einfach brew install ccat.

https://github.com/jingweno/ccat . Wie Katze, zeigt jedoch Inhalte mit Syntaxhervorhebung an. In Go gebaut.

7
joost

Alte Frage, ich habe nur nach dem Rekord gefragt, um die Lösung zu liefern, die ich am Ende verwendet habe. Vielleicht ist das ein bisschen hackig (wahrscheinlich nicht die ursprüngliche Absicht des Parameters), aber:

alias cgrep = 'grep -C 9000'

katze was auch immer | cgrep "snozzberries" </ strike>

..grep -C N liefert über und unter dem gefundenen Objekt N Kontextzeilen. Wenn es größer als die Eingabe ist, wird die gesamte Eingabe eingeschlossen. In diesem Fall stellen wir nur sicher, dass es größer ist als jede typische Terminalausgabe, die wir manuell betrachten möchten. Dies ist im Allgemeinen das, was Sie beim Hervorheben tun möchten.

BEARBEITEN: Diese von Beni Cherniavsky-Paskin vorgeschlagene Lösung ist jedoch überlegen - sie passt (und markiert) entweder das Wort, das Sie suchen, oder den Zeilenanfang (nicht hervorhebbar). Das Nettoergebnis ist genau das, was Sie wollen.

cat whatever | egrep 'snozzberries|$'

Das ist die neue beste Lösung, die ich für dieses Problem gesehen habe, danke Beni.

3
Mr. B

bat macht genau das und kann auf cat alias cat='bat'

2

In dieser Frage https://superuser.com/questions/602294/is-there-colorizer-utility-that-annahmebefehlsausgabe-und-farbendateifaktorgrcat/grc empfohlen als Alternative zu supercat .

Mann von grc und von grcat ; es ist Teil von grc package ( sources ):

grc - frontend für generische colorizer grcat (1)

grcat - von der Standardeingabe lesen, kolorieren und in die Standardausgabe schreiben

2
osgx

Ich habe das kleine Skript geschrieben, um die Einfärbung mit pygmentize durchzuführen.

colorize_via_pygmentize() {
    if [ ! -x "$(which pygmentize)" ]; then
        echo "package \'Pygments\' is not installed!"
        return -1
    fi

    if [ $# -eq 0 ]; then
        pygmentize -g [email protected]
    fi

    for FNAME in [email protected]
    do
        filename=$(basename "$FNAME")
        lexer=`pygmentize -N \"$filename\"`
        if [ "Z$lexer" != "Ztext" ]; then
            pygmentize -l $lexer "$FNAME"
        else
            pygmentize -g "$FNAME"
        fi
    done
}

Und machen Sie dann einen Alias ​​für das Skript. alias cat=colorize_via_pygmentize. Vergessen Sie nicht, dies in ~/.bashrc zu speichern.

1
Rohit Sehgal

Wenn Sie möchten, dass ein Einzeiler die Ausgabe von cat auf eine bestimmte Farbe setzt, können Sie ihn anhängen

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

zu Ihrer ~/.$(basename $Shell)rc

Hier ist ein Gist mit Farbcodes: https://Gist.github.com/chrisopedia/8754917

Ich mag '\e[1;93m', was hochintensiv gelb ist. Es sieht aus wie das:  enter image description here

0
okovko

benutze einfach vim und diese vimrc Datei .

einzeiler:

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>' "[email protected]" 

nano -v kann auch eine Alternative sein.

0
eadmaster