Bagaimana saya bisa menyoroti XML pada baris perintah?

14

Bagaimana saya bisa menyorot XML dari stdin (mis. Disalurkan dari xmllint --format) ke stdout?

Saya tahu bagaimana cara menyorot bekerja di nanodan view, tetapi apakah ada sesuatu yang hanya keluaran ke stdout dan keluar?

Apa yang saya tautkan hanya mengetikkan sesuatu seperti

xmllint --format xmlfile.xml | some-highlighter

atau mungkin, untuk file besar

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

dan dapatkan hasil yang cantik.

Sietse
sumber

Jawaban:

14

Supercat dan grcat (grc) dapat melakukan highlight syntax. Anda mungkin harus membuat atau menemukan file konfigurasi untuk XML. Keduanya tersedia di repositori Ubuntu dan juga di tautan yang disediakan.

Pygmentize menyertakan penyorotan XML. Ini tersedia sebagai "python-pygments" di repositori Ubuntu atau dengan menggunakan easy_install Pygments.

xmllint --format xmlfile.xml | pygmentize -l xml | less
Dijeda sampai pemberitahuan lebih lanjut.
sumber
Pygmentize melakukan trik untuk saya, meskipun, setidaknya pada OS X, saya harus memberikannya opsi -O encoding=UTF-8untuk membuatnya berfungsi pada output xmllint. Terima kasih!
Sietse
1
Jika Anda seperti saya dan terganggu oleh keluhan yang mengeluhkan ketika Anda keluar lebih sedikit tanpa menggunakan semua outputnya (Pipa rusak), pipa melalui buffer ( apt-get install buffer). Misalnyaxmllint --format foo.xml |pygmentize -g |buffer |less -r
Marlies
Di Ubuntu yang lebih modern, saya biasa sudo apt install python-pygmentsmenginstalnya.
MarkHu
9

Ini adalah bagaimana Anda melakukannya menggunakan GNU source-highlight dan lebih sedikit:

source-highlight -i /tmp/foo.xml -f esc | kurang -r
pengguna78659
sumber
1
Dari stdin, hanya sajasource-highlight -s xml -f esc
MikeFHay
Meskipun sebenarnya, saya menemukan esc256menghasilkan output yang lebih cantik daripadaesc
MikeFHay
1
Catatan, ini tidak akan memformat XML, dan jika XML Anda semua dalam satu baris, itu akan menyebabkan source-highlightberjalan sangat lambat. Mungkin parsing input baris demi baris. Perintah ini memberi saya hasil yang baik dan cepat:xmllint --format - < input.xml | source-highlight -f esc -s xml | less -F
Winny
@ Winny, itu luar biasa, terima kasih. Satu catatan kecil: Saya membuatnya bekerja dengan less -r(sebagaimana dinyatakan dalam jawaban) bukan less -F.
Anatoly Scherbakov
6

Saya menemukan highlight di Homebrew untuk OSX, dan saya yakin itu tersedia di repositori Ubuntu. Itu menyoroti dan output ke sejumlah format, termasuk output terminal.

Sietse
sumber
2
pbpaste|xmllint --format -|highlight --out-format=ansi --syntax=xmlmelakukan trik untukku. (Tapi saya bisa berdebat tentang pilihan warna highlight.)
tuomassalo