是否可以通过颜色分隔 STDOUT 上下文?

Is it possible to separate STDOUT context by its colour?

我正在使用优秀包 icdiff (https://github.com/jeffkaufman/icdiff) 的输出来检查文件更新迭代之间的差异。不过,我只想分析出显着的差异。从包 --help 中我看不到任何内置选项(为了全面披露,我在 github 问题页面上 'cross posted' 看看是否可以添加它,或者我'我错过了一些东西)。

这让我想知道是否有一个 hacky 解决方案可能是根据颜色解析线条,因为它们也由 'severity of difference' 进行颜色编码。这在 bash 中完全可行吗? (也欢迎其他方法!)

这是输出示例(我只能考虑在此处添加图片,因为标记不会显示颜色)。例如,我只想得到整条线都是实线的线 red/green 。请原谅一些屏幕环绕,我的显示器不够宽,文字已经足够小了。

您可以在 ANSI 转义序列上进行 grep,例如(红色为 31):

grep '^[\[31m'     # make the escape character (^[) by typing ctrl+v ESC

但是如果输出没有发送到终端,您需要确保输出保持彩色:(当输出不是终端时,许多程序会将其输出设为黑白。-您可以使用 less 检查它,这将显示你的转义序列)

例如使用 GNU Grep

grep -Po $'\e\[31m\K.*(?=\e\[\d+m)'

提取红色文本,

  • \K 保持左侧外侧匹配,就像后视一样
  • (?=..) 前瞻断言 0 长度匹配