如何为差异输出着色?

如何为差异输出着色?

我想有条件地格式化 Unix 文件,我目前正在处理diff命令,想知道是否可以格式化diff命令输出的文本。

例子:

匹配的值应显示为绿色。
不匹配的值应显示为红色。

假设我有两个文件file1file2并且我的命令是diff file1 file2.

现在我想要假设输出包含 5 个不匹配,那么这些不匹配应该以红色显示。如何使用unix来实现这一点?

简而言之,“对于不匹配的值,将 diff 命令的输出颜色更改为红色”

答案1

diff --color选项已添加到GNU diffutils 3.4 (2016-08-08)

这是大多数发行版上的默认diff实现,很快就会得到它。

Ubuntu 18.04 有diffutils3.6,因此也有它。

在 3.5 上它看起来像这样:

在此输入图像描述

测试:

diff --color -u \
  <(seq 6 | sed 's/$/ a/') \
  <(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')

显然是在提交 c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (2015 年 3 月)中添加的。

词级差异

喜欢diff-highlight。看起来不可能,功能请求:https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html

相关主题:

ydiff不过,请参阅下文。

ydiff并排字级差异

https://github.com/ymattw/ydiff

这就是涅槃吗?

python3 -m pip install --user ydiff
diff -u a b | ydiff -s

结果:

在此输入图像描述

如果行太窄(默认 80 列),请使用以下命令适合屏幕:

diff -u a b | ydiff -w 0 -s

测试文件的内容:

A

1
2
3
4
5 the original line the original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the original line
16
17
18
19
20

1
2
3
4
5 the original line teh original line the original line the original line
6
7
8
9
10
11
12
13
14
15 the original line the original line the original line the origlnal line
16
17
18
19
20

ydiffGit 集成

ydiff与 Git 集成,无需任何配置。

从 git 存储库内部,git diff您可以执行以下操作,而不是:

ydiff -s

而不是git log

ydiff -ls

也可以看看:https://stackoverflow.com/questions/7669963/how-can-i-get-a-side-by-side-diff-when-i-do-git-diff/14649328#14649328

在 Ubuntu 16.04、git 2.18.0、ydiff 1.1 上测试。

答案2

如果您有权访问 GNU,diff您可以使用它--X-group-format选项无需任何额外工具即可获得该效果:

diff --old-group-format=$'\e[0;31m%<\e[0m' \
     --new-group-format=$'\e[0;31m%>\e[0m' \
     --unchanged-group-format=$'\e[0;32m%=\e[0m' \
     file1 file2

那使用ANSI 颜色转义码得到红色和绿色,与ANSI-C 引用在 shell 中访问\e转义符。

--old-group-format--new-group-format使用 和 识别不匹配的行并在红色和彩色重置代码之间插入它们%<%>同时--unchanged-group-format在绿色和重置代码之间插入匹配的行。

你也可以使用--old-line-format(等等),以每行多余的颜色转义为代价:--old-line-format=$'\e[0;31m%L\e[0m'.

答案3

尝试colordiff file1 file2

colordiff 在您的 Linux/BSD 发行版中的可用性

那些运行 Debian 或 Ubuntu(或其任何衍生版本)的用户可能只需使用“apt-get install colordiff”即可下载并安装; colordiff 还针对许多其他 Linux、UNIX 和 BSD 发行版和操作系统进行了打包。

(引自http://www.colordiff.org/

答案4

有色,字级 diff输出

这是您可以使用以下脚本执行的操作差异突出显示:

彩色差异截图

#!/bin/sh -eu

# Use diff-highlight to show word-level differences

diff -U3 --minimal "$@" |
  sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
  diff-highlight

(归功于@retracile 的回答用于sed突出显示)

相关内容