我想有条件地格式化 Unix 文件,我目前正在处理diff
命令,想知道是否可以格式化diff
命令输出的文本。
例子:
匹配的值应显示为绿色。
不匹配的值应显示为红色。
假设我有两个文件file1
,file2
并且我的命令是diff file1 file2
.
现在我想要假设输出包含 5 个不匹配,那么这些不匹配应该以红色显示。如何使用unix来实现这一点?
简而言之,“对于不匹配的值,将 diff 命令的输出颜色更改为红色”
答案1
diff --color
选项已添加到GNU diffutils 3.4 (2016-08-08)
这是大多数发行版上的默认diff
实现,很快就会得到它。
Ubuntu 18.04 有diffutils
3.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
相关主题:
- https://stackoverflow.com/questions/1721738/using-diff-or-anything-else-to-get-character-level-diff- Between-text-files
- 行内差异
- https://superuser.com/questions/496415/using-diff-on-a-long-one-line-file
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
ydiff
Git 集成
ydiff
与 Git 集成,无需任何配置。
从 git 存储库内部,git diff
您可以执行以下操作,而不是:
ydiff -s
而不是git log
:
ydiff -ls
在 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 发行版和操作系统进行了打包。
答案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
突出显示)