web-dev-qa-db-fra.com

Mise en évidence/colorisation du chat

Existe-t-il une méthode pour coloriser la sortie de cat, comme le fait grep?.

Pour grep, dans la plupart des consoles, une sortie en couleur met en évidence les mots-clés recherchés. Sinon, vous pouvez le forcer en appelant grep --colorIl existe-t-il un moyen générique de colorer la sortie de tout programme en fonction de votre choix personnel.

D'après ce que j'ai compris, le programme lui-même n'est pas responsable des couleurs. C'est la coquille. 

J'utilise le shell par défaut dans FreeBSD 5.2.1 qui semble n'avoir jamais vu de couleurs depuis Epoch.

162
Lelouch Lamperouge

cat avec la coloration syntaxique est tout simplement hors de portée. cat n’est pas fait pour ça . Si vous voulez juste que tout le contenu d’un fichier soit coloré (avec la même couleur pour tout le fichier), vous pouvez utiliser des séquences d’échappement pour contrôler la couleur.

Voici un exemple de script qui choisira la couleur en fonction du type de fichier (vous pouvez utiliser quelque chose comme ceci au lieu d'appeler directement 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"

La procédure ci-dessus (sur un terminal prenant en charge ces séquences d'échappement) imprimera tout fichier texte en "gras" et tous les fichiers binaires en rouge. Vous pouvez utiliser strings au lieu de cat pour imprimer des fichiers binaires et améliorer la logique pour l'adapter à vos besoins.

23
Costi Ciudatu

Je recommanderais pygmentize à partir du paquet python python-pygments . Vous voudrez peut-être définir l'alias pratique suivant (à moins que vous n'utilisiez ccat du paquet ccrypt).

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

Et si vous voulez des numéros de ligne:

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

Options:

pygmentize est bon. J'ai un alias:

alias c='pygmentize -g'

mais surligner est une autre alternative largement disponible:

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

Installation:

Vous devrez peut-être installer pygments en utilisant:

Sudo pip install pygments
Sudo easy_install Pygments #for Mac user

et pour le paquet highlight qui est facilement disponible sur toutes les distributions

Sudo apt-get install highlight
Sudo yum install highlight

En action:

Je joins des clichés pour les deux en bas pour une bonne comparaison en surbrillance

Voici pygmentize en action: Pygmentize highlighting on python file

et ceci est highlight: Highlight highlighting on python file

100
Shubham Chaudhary

L'outil que vous recherchez est probablement supercat (voici une introduction rapide publiée par le Linux Journal). 

Je me rends compte que cette réponse est tardive et qu'elle ne répond pas pleinement aux exigences du PO. Donc, je l’ajoute juste pour référence (cela pourrait être utile pour d’autres personnes cherchant à coloriser la sortie d’un fichier texte). 

31
mfriedman

vimcat est un fichier unique (script shell) et fonctionne bien:

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

La dernière mise à jour date de décembre 2013. Astuce: vous pouvez forcer la reconnaissance du type de fichier par vimcat -c "set ft=<type>".

29
Soergener

À partir de fin avril 2018:

Bat - Un clone cat (1) avec coloration syntaxique et intégration Git.

Le projet est un clone de chat prenant en charge les couleurs et les personnalisations écrites en rouille. Il offre non seulement la coloration syntaxique avec plusieurs thèmes, mais également l'intégration de Git. Comme décrit dans la documentation:

bat tente d'atteindre les objectifs suivants:

  • Fournir une coloration syntaxique élégante et avancée
  • Intégration avec Git pour afficher les modifications de fichiers
  • Soyez un remplaçant pour chat (POSIX)
  • Offrir une interface de ligne de commande conviviale

Il va sans dire qu’il est beaucoup plus rapide que pygmentize et ne s’étouffe pas face aux fichiers volumineux.

Le code source et les versions binaires + les instructions d'installation se trouvent dans le référentiel Github, ainsi qu'une comparaison avec d'autres programmes .

20
dangom

Il existe une version colorisée de cat - ccat . Obtenez-le de https://github.com/jingweno/ccat/ .

Installation sur Linux/Windows/macOS

Il s’agit d’un seul exécutable autonome, vous pouvez donc décompresser la version binaire de votre système d’exploitation à partir de https://github.com/jingweno/ccat/releases et copier le binaire ccat par exemple dans /usr/local/bin

Si vous voulez éviter les fichiers binaires ou s'il n'y en a pas pour votre plate-forme (par exemple, Raspberry Pi, etc.), vous pouvez également compiler à partir des sources, étant donné que vous disposez d'un environnement de développement go (apt install golang sous Debian). linuxes ou brew install golang sur mac):

go get -u github.com/jingweno/ccat

Le binaire ccat sera créé sous votre $GOPATH/bin.

Installation sur Mac via homebrew

brew install ccat

Alias ​​to cat

Pour remplacer cat régulier par ccat, ajoutez ~/.bashrc:

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

ccat est implémenté dans Go , il s’agit donc d’un binaire natif qui s'exécute beaucoup plus rapidement que les solutions basées sur Python, tel que pygments , le module derrière pygmentize; Je n'ai pas vu de différence de vitesse notable entre cat et ccat.

19
ccpizza

Le meilleur moyen, et le plus simple, de le faire si vous avez vim dans votre ordinateur est d’utiliser vimcat qui est fourni avec le programme vimpager.

  1. Installez vimpage avec git clone git://github.com/rkitover/vimpager cd vimpager Sudo make install  
  2. Exécutez vimcat:

    vimcat index.html

11
Amaynut

source-highlight

Il est peut-être possible de trouver un source-highlight intéressant _ { publié sous GNU }: un paquet différent de highlight

Extrait de apt-cache show source-highlight:

Description-fr: convertir le code source en syntaxe du document en surbrillance.
Ce programme, à partir d’un fichier source, produit un document avec la syntaxe mise en évidence.
Il prend en charge la coloration syntaxique pour plus de 100 formats de fichiers ...
Pour la sortie, les formats suivants sont pris en charge: HTML, Séquences d'échappement de couleurs XHTML, LaTeX, Texinfo, ANSI et DocBook

J'ai fait des pseudonymes (Cat et PCat, voir ci-dessous) et voici leur sortie 

Screen Example

Vous pouvez installer sur Debian avec 

Sudo apt-get install source-highlight

et l'ajouter comme alias par exemple dans votre .bash_aliases avec quelque chose comme la ligne ci-dessous. 

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

Ou vous pouvez faire un alias similaire (sans le -i à la fin pour avoir la possibilité de canaliser dans)

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

Parmi les options qu'il est possible de lire à partir de man source-highlight le -s souligne, il est possible de sélectionner, ou force, la surbrillance par ligne de commande ou laisser au programme cette tâche: 

-s, --src-lang = langue source de STRING (utilisez --lang-list pour obtenir la liste complète). Si non spécifié, la langue source sera déterminée par l'extension de fichier.

--lang-list liste tous les langages pris en charge et le fichier de définition de langage associé

11
Hastur

De ce que je comprends, le binaire lui-même n'est pas responsable des couleurs. C'est la coquille.

Ce n'est pas correct Terminal interprète uniquement les codes de couleur qui sont émis vers le terminal. En fonction de ses capacités, il peut ignorer certains codes de formatage/coloration.

De la page de manuel, il ne semble pas que le chat supporte la coloration de sa sortie. Même s’il supportait la coloration grep, que devrait-il colorer dans le fichier texte? Syntaxe soulignant la connaissance requise de la langue sous-jacente qui ne relève pas d'un utilitaire simple comme cat.

Vous pouvez essayer des éditeurs plus puissants comme vim, emacs, gedit, etc. sur la plate-forme Unix si voir le code en surbrillance est votre objectif.

8
Ashwinee K Jha

Sur OSX, faites simplement brew install ccat.

https://github.com/jingweno/ccat . Comme chat, mais affiche le contenu avec la coloration syntaxique. Construit en Go.

7
joost

Vieille question, il suffit de répondre pour que le compte rendu fournisse la solution que j'ai finalement utilisée. C'est peut-être un peu hacky (probablement pas l'intention initiale du paramètre), mais:

alias cgrep = 'grep -C 9000'

chat quel que soit | cgrep 'snozzberries' </ strike>

..grep -C N fournira N lignes de contexte au-dessus et au-dessous de l'élément trouvé. Si elle est plus grande que l'entrée, toute l'entrée est incluse. Dans ce cas, nous veillons simplement à ce que sa taille soit supérieure à celle d'une sortie de terminal classique que nous voudrons examiner manuellement, ce qui correspond généralement à ce que vous cherchez à faire si vous la mettez en surbrillance.

EDIT: Cependant, cette solution proposée ci-dessous par Beni Cherniavsky-Paskin est supérieure - elle correspond (et met en surbrillance) le mot que vous recherchez ou le début de la ligne (non surlignable). Le résultat net est exactement ce que vous voulez.

cat whatever | egrep 'snozzberries|$'

C'est la meilleure solution nouvelle que j'ai vue pour ce problème, merci Beni.

3
Mr. B

bat fait exactement cela et peut être aliasé avec cat alias cat='bat'

2
Sailendra Pinupolu

Dans cette question https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordingrcat/grc outil a été recommandé comme alternative à supercat .

Homme de grc et de grcat ; cela fait partie du paquet grc ( sources ):

grc - interface pour colorateur générique grcat (1)

grcat - lit à partir de l'entrée standard, colorie-le et écrit sur la sortie standard

2
osgx

J'ai écrit le petit script pour effectuer la colorisation en utilisant 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
}

Et ensuite, créez un alias pour le script. alias cat=colorize_via_pygmentize. Aussi, n'oubliez pas de sauvegarder ceci dans ~/.bashrc .

1
Rohit Sehgal

Si vous voulez juste qu'un seul liner définisse la sortie cat sur une couleur donnée, vous pouvez ajouter

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

à votre ~/.$(basename $Shell)rc

Voici un Gist avec des codes de couleur: https://Gist.github.com/chrisopedia/8754917

J'aime '\e[1;93m', qui est jaune haute intensité. Cela ressemble à ceci:  enter image description here

0
okovko

utilisez simplement vim et ce fichier vimrc .

bon mot:

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 peut également être une alternative.

0
eadmaster