Como posso destacar XML na linha de comando?

14

Como posso destacar XML de stdin (por exemplo, canalizado de xmllint --format) para stdout?

Eu sei como obter destaque trabalhando no nanoe view, mas há algo que apenas gera saídas para stdout e sai?

O que eu gostaria de fazer é digitar algo como

xmllint --format xmlfile.xml | some-highlighter

ou talvez, para arquivos grandes

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

e obter uma saída bonita.

Sietse
fonte

Respostas:

14

Supercat e grcat (grc) podem destacar a sintaxe canalizada. Você provavelmente precisará criar ou encontrar arquivos de configuração para XML. Ambos estão disponíveis nos repositórios do Ubuntu, bem como nos links fornecidos.

O Pycementize possui o destaque XML incluído. Está disponível como "python-pygments" nos repositórios do Ubuntu ou usando easy_install Pygments.

xmllint --format xmlfile.xml | pygmentize -l xml | less
Pausado até novo aviso.
fonte
O Pycementize fez o truque para mim, embora, pelo menos no OS X, eu tivesse que dar a opção -O encoding=UTF-8de fazê-lo funcionar na saída do xmllint. Obrigado!
Sietse
1
Se você é como eu e fica chateado com o queixoso de reclamar quando sai menos sem consumir toda a sua saída (tubo quebrado), passe pelo buffer ( apt-get install buffer). Exemploxmllint --format foo.xml |pygmentize -g |buffer |less -r
Marlies
No Ubuntu mais moderno, eu costumava sudo apt install python-pygmentsinstalá-lo.
31419 MarkHu
9

É assim que você faz isso usando o GNU source-highlights e menos:

fonte-destaque -i /tmp/foo.xml -f esc | menos -r
user78659
fonte
1
A partir de stdin, é só:source-highlight -s xml -f esc
MikeFHay
Embora, na verdade, eu estou achando esc256produz uma saída mais bonita do queesc
MikeFHay
1
Observe que isso não formatará o XML e, se o XML estiver em uma linha, ele será source-highlightexecutado muito lentamente. Provavelmente está analisando a entrada linha por linha. Este comando me deu bons resultados rápidos:xmllint --format - < input.xml | source-highlight -f esc -s xml | less -F
Winny
@ Winny, isso é incrível, obrigado. Uma observação menor: eu trabalhei com less -r(como indicado na resposta) em vez de less -F.
Anatoly Scherbakov
6

Encontrei destaque no Homebrew for OSX e tenho certeza que está disponível no repositório Ubuntu. Destaca e envia para vários formatos, incluindo saída do terminal.

Sietse
fonte
2
pbpaste|xmllint --format -|highlight --out-format=ansi --syntax=xmlfez o truque para mim. (Eu poderia argumentar sobre opções de cores de destaque, no entanto.)
tuomassalo