How can I highlight XML on the command line?
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.
Sietse
Updated on September 17, 2022Comments
-
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
andview
, 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 over 13 yearsPygmentize 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 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 about 11 yearsFrom stdin, it's just
source-highlight -s xml -f esc
-
MikeFHay about 11 yearsAlthough actually, I'm finding
esc256
produces prettier output thanesc
-
Karlin over 10 yearsIf 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 almost 9 yearsNote, 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 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 ofless -F
. -
MarkHu about 5 yearsIn more modern Ubuntu, I used
sudo apt install python-pygments
to install it. -
knb about 2 yearsFor
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
)