コマンドラインでXMLを強調表示するにはどうすればよいですか?


14

XMLをstdinから(たとえばからパイプでxmllint --format)stdout にハイライトするにはどうすればよいですか?

nanoおよびviewで強調表示を取得する方法は知っていますが、stdoutに出力して終了するだけのものがありますか?

リンクするには、次のように入力します

xmllint --format xmlfile.xml | some-highlighter

または、大きなファイルの場合

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

きれいな出力を取得します。

回答:


14

Supercatgrcat(GRC)は、パイプで連結された構文の強調表示を行うことができます。おそらくXMLの構成ファイルを作成または検索する必要があります。これらは、Ubuntuリポジトリとリンクから入手できます。

PygmentizeにはXMLハイライトが含まれています。Ubuntuリポジトリで「python-pygments」として、またはを使用して入手できますeasy_install Pygments

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

少なくともOS Xでは、Pygmentizeがトリックを行いましたが、-O encoding=UTF-8xmllintの出力で動作させるオプションを提供する必要がありました。ありがとう!
シーツ

1
あなたが私と同じで、出力をすべて消費せずに終了するとき(壊れたパイプ)pygmentizeの不満に悩まされる場合は、バッファー(apt-get install buffer)をパイプ処理します。例えばxmllint --format foo.xml |pygmentize -g |buffer |less -r
マルリース

より現代的なUbuntuでは、私はsudo apt install python-pygmentsそれをインストールしていました。
MarkHu

9

これは、GNU source-highlight以下を使用して行う方法です。

source-highlight -i /tmp/foo.xml -f esc | 少ない-r

1
stdinから、それはちょうどsource-highlight -s xml -f esc
MikeFHay

実際には、esc256esc
MikeFHay

1
これはXMLをフォーマットしないことに注意してください。XMLがすべて1行にある場合source-highlight、実行速度が非常に遅くなります。入力行を1行ごとに解析している可能性があります。このコマンドにより、良好で高速な結果が得られxmllint --format - < input.xml | source-highlight -f esc -s xml | less -F
Winny

@Winny、それは素晴らしいです、ありがとう。ちょっとした注意:のless -r代わりに(答えで述べたように)動作するようにしましたless -F
アナトリーシェルバコフ

6

Homebrew for OSXでハイライトを見つけましたが、Ubuntuリポジトリで入手できると確信しています。強調表示を行い、ターミナル出力を含む多くの形式で出力します。


2
pbpaste|xmllint --format -|highlight --out-format=ansi --syntax=xml私のためにトリックをしました。(ただし、ハイライトの色の選択については議論できます。)
tuomassalo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.