是否可以通过颜色分隔 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 长度匹配
我正在使用优秀包 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 长度匹配