How can I highlight XML on the command line?

8,666

Solution 1

Supercat and grcat (grc) can do piped syntax highlighting. You'll probably have to make or find configuration files for XML. They are both available in the Ubuntu repositories as well as at the links provided.

Pygmentize has XML highlighting included. It's available as "python-pygments" in the Ubuntu repositories or by using easy_install Pygments.

xmllint --format xmlfile.xml | pygmentize -l xml | less

Solution 2

This is how you do it using GNU source-highlight and less:

source-highlight -i /tmp/foo.xml -f esc | less -r

Solution 3

I found highlight in Homebrew for OSX, and I'm sure it's available in the Ubuntu repository. It does highlighting and output to a number of formats, including terminal output.

Solution 4

I use bat:

xmllint --format - | bat -pP

-p removes all decoration (line numbers, etc.), -P disables the pager. Update: use -pp with newer versions of bat.

bat: https://github.com/sharkdp/bat

Share:
8,666
Sietse
Author by

Sietse

Updated on September 17, 2022

Comments

  • Sietse
    Sietse over 1 year

    How can I highlight XML from stdin (e.g. piped from xmllint --format) to stdout?

    I know how to get highlighting working in nano and view, but is there something that just outputs to stdout and exits?

    What I'd link to do is just type something like

    xmllint --format xmlfile.xml | some-highlighter
    

    or maybe, for big files

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

    and get pretty output.

  • Sietse
    Sietse over 13 years
    Pygmentize did the trick for me, although, at least on OS X, I had to give it the option -O encoding=UTF-8 to make it work on xmllint's output. Thanks!
  • geepee
    geepee over 11 years
    pbpaste|xmllint --format -|highlight --out-format=ansi --syntax=xml did the trick for me. (I could argue about highlight's color choices, though.)
  • MikeFHay
    MikeFHay about 11 years
    From stdin, it's just source-highlight -s xml -f esc
  • MikeFHay
    MikeFHay about 11 years
    Although actually, I'm finding esc256 produces prettier output than esc
  • Karlin
    Karlin over 10 years
    If you're like me and annoyed by pygmentize complaining when you exit less without consuming all its output (Broken pipe), pipe through buffer (apt-get install buffer). E.g. xmllint --format foo.xml |pygmentize -g |buffer |less -r
  • Winny
    Winny almost 9 years
    Note, this won't format the XML, and if your XML is all on one line, it will cause source-highlight to run very slowly. It is probably parsing the input line by line. This command gave me good, fast results: xmllint --format - < input.xml | source-highlight -f esc -s xml | less -F
  • Anatoly Scherbakov
    Anatoly Scherbakov over 8 years
    @Winny, that is awesome, thank you. One minor note: I got it working with less -r (as stated in the answer) instead of less -F.
  • MarkHu
    MarkHu about 5 years
    In more modern Ubuntu, I used sudo apt install python-pygments to install it.
  • knb
    knb about 2 years
    For bat 0.12.1 I cannot use -P, but I can use --paging=never instead. (The error message was: error: Found argument '-P' which wasn't expected, or isn't valid in this context)