¿Cómo puedo resaltar XML en la línea de comando?

14

¿Cómo puedo resaltar XML de stdin (por ejemplo, canalizado desde xmllint --format) a stdout?

Sé cómo hacer resaltar trabajando en nanoy view, pero ¿hay algo que solo salga a stdout y salga?

Lo que me gustaría vincular es simplemente escribir algo como

xmllint --format xmlfile.xml | some-highlighter

o tal vez, para archivos grandes

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

y obtener una salida bonita.

Sietse
fuente

Respuestas:

14

Supercat y grcat (GRC) pueden hacer resaltar la sintaxis entubada. Probablemente tendrá que crear o encontrar archivos de configuración para XML. Ambos están disponibles en los repositorios de Ubuntu, así como en los enlaces proporcionados.

Pygmentize tiene resaltado XML incluido. Está disponible como "python-pygments" en los repositorios de Ubuntu o mediante el uso easy_install Pygments.

xmllint --format xmlfile.xml | pygmentize -l xml | less
Pausado hasta nuevo aviso.
fuente
Pygmentize hizo el truco para mí, aunque, al menos en OS X, tuve que darle la opción -O encoding=UTF-8de hacerlo funcionar en la salida de xmllint. ¡Gracias!
Sietse
1
Si eres como yo y te molesta que Pygmentize se queje cuando sales menos sin consumir toda su salida (tubería rota), canaliza a través del búfer ( apt-get install buffer). Por ejemploxmllint --format foo.xml |pygmentize -g |buffer |less -r
Marlies
En Ubuntu más moderno, solía sudo apt install python-pygmentsinstalarlo.
MarkHu
9

Así es como lo haces usando GNU source-highlight y menos:

source-highlight -i /tmp/foo.xml -f esc | menos -r
usuario78659
fuente
1
De stdin, es solosource-highlight -s xml -f esc
MikeFHay
Aunque en realidad, estoy descubriendo que esc256produce una salida más bonita queesc
MikeFHay
1
Tenga en cuenta que esto no formateará el XML, y si su XML está todo en una línea, hará que se source-highlightejecute muy lentamente. Probablemente está analizando la entrada línea por línea. Este comando me dio buenos y rápidos resultados:xmllint --format - < input.xml | source-highlight -f esc -s xml | less -F
Winny
@ Winny, eso es increíble, gracias. Una nota menor: lo conseguí trabajando less -r(como se indica en la respuesta) en lugar de less -F.
Anatoly Scherbakov
6

Encontré lo más destacado en Homebrew para OSX, y estoy seguro de que está disponible en el repositorio de Ubuntu. Destaca y genera varios formatos, incluida la salida de terminal.

Sietse
fuente
2
pbpaste|xmllint --format -|highlight --out-format=ansi --syntax=xmlhizo el truco para mí (Sin embargo, podría discutir sobre las opciones de color del resaltado.)
tuomassalo