Bash 如何显示两个文件之间的合并差异?
我怎样才能得到两个文件之间的差异字母 比如说, 文件1: 文件2: 在diff之后,我应该只从第二个文件中获得这个差异字符串:Bash 如何显示两个文件之间的合并差异?,bash,diff,Bash,Diff,我怎样才能得到两个文件之间的差异字母 比如说, 文件1: 文件2: 在diff之后,我应该只从第二个文件中获得这个差异字符串:A05对于给定的示例, 您可以逐个字符比较文件,如果有差异,则打印第二个文件的字符。有一种方法可以做到这一点: paste <(fold -w1 file1) <(fold -w1 file2) | \ while read c1 c2; do [[ $c1 = $c2 ]] || printf $c2; done 粘贴对于给定的示例, 您可以逐个字符比较文
A05
对于给定的示例,
您可以逐个字符比较文件,如果有差异,则打印第二个文件的字符。有一种方法可以做到这一点:
paste <(fold -w1 file1) <(fold -w1 file2) | \
while read c1 c2; do [[ $c1 = $c2 ]] || printf $c2; done
粘贴对于给定的示例,
您可以逐个字符比较文件,如果有差异,则打印第二个文件的字符。有一种方法可以做到这一点:
paste <(fold -w1 file1) <(fold -w1 file2) | \
while read c1 c2; do [[ $c1 = $c2 ]] || printf $c2; done
粘贴
我们只对每行的最后一个字符感兴趣。我们使用sed放弃其余部分:
$ diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) |
> sed 's/.*\(.\)$/\1/'
A
0
5
如果您可以使用GNU diffutils,另一种选择是cmp
:
$ cmp -lb file1 file2 | awk '{print $5}' | tr -d '\n'
A05
cmp
逐字节比较文件。-l
选项(“verbose”)使其打印所有差异,而不仅仅是第一个差异;-b
选项使其添加不同字节的ASCII解释:
$ cmp -lb file1 file2
2 141 a 101 A
18 65 5 60 0
34 61 1 65 5
awk命令将此输出减少到第五列,并且tr
删除换行符
我们只对每行的最后一个字符感兴趣。我们使用sed放弃其余部分:
$ diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) |
> sed 's/.*\(.\)$/\1/'
A
0
5
如果您可以使用GNU diffutils,另一种选择是cmp
:
$ cmp -lb file1 file2 | awk '{print $5}' | tr -d '\n'
A05
cmp
逐字节比较文件。-l
选项(“verbose”)使其打印所有差异,而不仅仅是第一个差异;-b
选项使其添加不同字节的ASCII解释:
$ cmp -lb file1 file2
2 141 a 101 A
18 65 5 60 0
34 61 1 65 5
awk命令将此输出减少到第五列,并且tr
删除换行符
$ cmp -lb file1 file2
2 141 a 101 A
18 65 5 60 0
34 61 1 65 5