将彩色输出转换为html


58

有提供彩色输出的工具:

dwdiff -c File1 File2 # word level diff
grep --color=always # we all know this guy
...

问题是:如何将其任意程序的彩色输出转换为彩色html文件?

其他输出格式也可能适用(LaTeX会很棒)。我认为html是一个很好的起点,因为很容易将其转换为其他格式。

(出于好奇如何保留终端颜色代码,请遵循以下答案:https : //unix.stackexchange.com/a/10832/9689-... | unbuffer command_with_colours arg1 arg2 | ...工具unbuffer期望的一部分)


1
如果您喜欢dwdiff,则可能还喜欢colordiff,这是使diff输出着色的包装器。我为diff = colordiff别名了多年,从来没有任何问题。
乔纳森·哈特利

Answers:


34

这个问题的答案可能就是您想要的。

它链接到这些工具,这些工具可以完成您正在寻找的转换:


3
aha在Ubuntu中也可用:sudo apt install aha。但是请注意,当输出是管道时,某些命令将抑制颜色。因此,在将输出发送到aha时,您可能需要在命令中添加选项。因为lsgrep将会是--color=always
mivk


5

您可以尝试vim使用AnsiEsc.vim插件通过转义码查看ANSI颜色,然后重定向至标准输出到vim -(确保已激活:syntax on)。然后通过vim命令将文件转换为HTML ::TOhtml。生成的HTML文件应具有彩色输出。


要将源代码非交互地转换为html,请尝试以下命令:

vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c

来源:(的:help g:html_no_progress一部分:help TOhtml)。

注意:您可以使用-代替myfile.c来从标准输入转换代码。


这对我不起作用。如果您解释该命令,将会有所帮助。
肯·英格拉姆

该命令已在Vim手册中进行了说明,通过:help TOhtml或进行检查:help g:html_no_progress
kenorb

您编写的方式令人困惑。使用AnsiEsc.vim插件。启用:syntax激活它,然后可以看到以ANSI格式正确设置样式的文本?之后,使用:TOhtml?将文件另存为html吗?
肯·英格拉姆

1
如果您对如何改进步骤有任何建议,请随时进行改进。
kenorb

2
我在评论中提供了它们。如果我正确理解了说明。我猜您是在建议我编辑答案吗?没关系 我可以的
肯·英格拉姆

4

您可以使用vim。这是我用来将diff输出转换为HTML的脚本的一部分。

vim -n \
    -c ':%s%^+  %+++    ' \
    -c ':%s%^-  %---    ' \
    -c ':%s%^   %       ' \
    -c ':set nu' \
    -c ':let html_use_css=1' \
    -c ':so $VIMRUNTIME/syntax/2html.vim' \
    -c ':wq' -c ':qa!' $input > /dev/null 2> /dev/null

之后,我运行sed来更改CSS和标题,使其与我想要的完全一样。

*编辑:我应该提到要获得颜色,您需要打开语法突出显示。我在.vimrc中执行此操作,但是如果您想在此处添加它,那将是另一行,例如

-c ':syntax on' \

好。那么,您想如何转换任意程序的输出,比如说:grep?
2012年

1
好的,我一开始不理解。如果要转换ANSI颜色代码,那么这里的答案可能就是您想要的。如果您只需要快速修改一下,则可以创建带有一行代码的sed脚本,用HTML替换ANSI代码。像's,^ [\ [31m,<span style ='color:red'>,gs,^ [\ [m,</ span>,g')之类的东西会很快又很脏,但可能足够。
user17591 2012年

您可以@ user17591将此链接作为另一个答案吗?我希望选择它作为我的问题的答案,并提高您的声誉。
Grzegorz Wierzowiecki,2012年

好。我向Perl模块添加了直接链接,以便任何后续用户都可以使用更少的间接级别来找到它,而且还可以链接到原始问题/答案以进行归因。
user17591 2012年

@ user17591,不错的解决方案!(+1)我最终添加了您的解决方案有2年历史的vimshell后续版本!
JJoao 2015年

3

pypi上的ansi2html

人们可能会从通过lolcat然后通过ansi2html传递常规shell输出中获得不尽人意的享受。就像是:

… | lolcat -f | ansi2html -ip

+1用于LaTeX输出。我会lolcat单单给您+1 ,但我太忙了。
尼尔·梅休

fyi,Debian的colorized-logs软件包安装了不兼容的ansi2html二进制可执行文件
scruss

1

更新:我添加了一个perl使用CPAN的HTML :: FromANSI模块的方法。要安装它,只需将其提取到一个目录中,然后以root用户身份perl -MCPAN -e 'install HTML::FromANSI'从该目录运行即可。满足您要求的特定功能是一个名为的脚本ansi2html。有趣的是,k在文件名中覆盖后,它会显示出相同的颜色损失,就像elisp-shell脚本一样……这是一个示例用法:

ls -l --color=always /bin/*k* | 
 grep --color=always "k\|x\|2010" |
  ansi2html  >/tmp/example.html
firefox /tmp/example.html

这是html输出。如Firefox中所示:

在此处输入图片说明


这是一种使用emacs elisp-shell脚本的方法 ...例如,称为htmlize ... Emacs不需要运行。

我最初是在黑色背景上进行测试的,但我注意到由于某种原因,白色背景无法与引入的Escape代码之一配合使用,该代码\e[K似乎是ERASE_LINE (擦除当前的终端输出行)。我添加了一行以删除此转义代码。现在,它适用于白色背景。

这是从ls管道传输到以grep进行进一步颜色突出显示的颜色突出显示输出的示例。

ls -l --color=always /bin/*k* | 
 grep --color=always "k\|x\|2010" >/tmp/example
htmlize /tmp/example
firefox /tmp/example.html

这是elsip-shell脚本。

#!/bin/sh
":"; exec /usr/bin/emacs -Q --script "$0" -- "$@" # -*-emacs-lisp-*-
(require 'ansi-color) (require 'htmlize)
(find-file (setq path-in (cadr argv)))
(ansi-color-apply-on-region (point-min) (point-max))
(switch-to-buffer (buffer-name (htmlize-buffer)))
(write-file (concat path-in ".html"))

这是Firefox中html输出的示例...如果时间允许,我将进一步研究ANSI代码覆盖问题。红色ks与绿色文件名重叠的地方,但这仅是因为为grep匆忙选择了测试正则表达式...(也许这会\e[K影响...

在此处输入图片说明


听起来不错。如果将有较小的工具可以完成此任务(emacs占用约100MB),那就太好了。
Grzegorz Wierzowiecki,2012年

1

对于那些假设命令输出不会有颜色的命令(例如某些测试框架)的用户,可能会发现使用脚本实用程序首先保存ansi输出很有用。然后可以将其推送到aha或提到的其他实用程序。


1

这只是@ user17591解决方案的后续工作-vim 脚本编制

#!/usr/bin/vim -ns
:%s%^+  %+++
:%s%^-  %---
:%s%^   %
:set nu
:let html_use_css=1
:so $VIMRUNTIME/syntax/2html.vim
:wq
:qa!

chmod它和

用法:(htmlvim file产生file.html)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.