Comment mettre en évidence XML sur la ligne de commande?

14

Comment puis-je mettre en évidence XML de stdin (par exemple, canalisé depuis xmllint --format) vers stdout?

Je sais comment mettre en surbrillance le travail dans nanoet view, mais y a-t-il quelque chose qui sort simplement vers la sortie standard et quitte?

Ce que je voudrais faire, c'est simplement taper quelque chose comme

xmllint --format xmlfile.xml | some-highlighter

ou peut-être, pour les gros fichiers

xmllint --format xmlfile.xml | some-highlighter | less

et obtenir une jolie sortie.

Sietse
la source

Réponses:

14

Supercat et grcat (grc) peuvent effectuer une mise en évidence de la syntaxe canalisée. Vous devrez probablement créer ou trouver des fichiers de configuration pour XML. Ils sont tous deux disponibles dans les référentiels Ubuntu ainsi que sur les liens fournis.

Pygmentize inclut la surbrillance XML. Il est disponible en tant que "python-pygments" dans les référentiels Ubuntu ou en utilisant easy_install Pygments.

xmllint --format xmlfile.xml | pygmentize -l xml | less
En pause jusqu'à nouvel ordre.
la source
Pygmentize a fait l'affaire pour moi, bien que, au moins sur OS X, je devais lui donner la possibilité -O encoding=UTF-8de le faire fonctionner sur la sortie de xmllint. Merci!
Sietse
1
Si vous êtes comme moi et ennuyé par la plainte de pygmentize lorsque vous quittez moins sans consommer toute sa sortie (pipe cassée), passez par buffer ( apt-get install buffer). Par exemplexmllint --format foo.xml |pygmentize -g |buffer |less -r
Marlies
Dans Ubuntu plus moderne, je l' sudo apt install python-pygmentsinstallais.
MarkHu
9

Voici comment vous le faites en utilisant GNU source-highlight et moins:

source-highlight -i /tmp/foo.xml -f esc | moins -r
user78659
la source
1
De stdin, c'est justesource-highlight -s xml -f esc
MikeFHay
Bien qu'en fait, je trouve esc256que la sortie est plus jolie queesc
MikeFHay
1
Remarque, cela ne formatera pas le XML, et si votre XML est sur une seule ligne, il source-highlights'exécutera très lentement. Il analyse probablement l'entrée ligne par ligne. Cette commande m'a donné de bons résultats rapides:xmllint --format - < input.xml | source-highlight -f esc -s xml | less -F
Winny
@ Winin, c'est génial, merci. Une remarque mineure: je l'ai fait travailler avec less -r(comme indiqué dans la réponse) au lieu de less -F.
Anatoly Scherbakov
6

J'ai trouvé un point culminant dans Homebrew pour OSX, et je suis sûr qu'il est disponible dans le référentiel Ubuntu. Il fait la mise en évidence et la sortie dans un certain nombre de formats, y compris la sortie du terminal.

Sietse
la source
2
pbpaste|xmllint --format -|highlight --out-format=ansi --syntax=xmla fait l'affaire pour moi. (Cependant, je pourrais discuter des choix de couleurs des
tons clairs