使用不同的行终止符比较/ Diff两个文件

时间:2015-07-04 12:59:09

标签: linux macos bash

我希望确保两个文本文件相同,问题是在Windows平台上生成了file1(SELECT_20150210.txt),在mac上生成了file2(sel.txt) ,因此这两个文件具有不同的行终止字符,即使它们看起来相同:

第一行:

Eriks-MacBook-Air:hftdump erik$ head -n 1 sel.txt
SystemState 0x04    25  03:03:48.800    O
Eriks-MacBook-Air:hftdump erik$ head -n 1 SELECT_20150210.txt
SystemState 0x04    25  03:03:48.800    O

cmp说它们不同:

Eriks-MacBook-Air:hftdump erik$ cmp sel.txt SELECT_20150210.txt
sel.txt SELECT_20150210.txt differ: char 35, line 1

但它只有不同的终止字符:

Eriks-MacBook-Air:hftdump erik$ head -n 1 SELECT_20150210.txt | hexdump -C
00000000  53 79 73 74 65 6d 53 74  61 74 65 09 30 78 30 34  |SystemState.0x04|
00000010  09 32 35 09 30 33 3a 30  33 3a 34 38 2e 38 30 30  |.25.03:03:48.800|
00000020  09 4f 0d 0a                                       |.O..|
00000024
Eriks-MacBook-Air:hftdump erik$ head -n 1 sel.txt | hexdump -C
00000000  53 79 73 74 65 6d 53 74  61 74 65 09 30 78 30 34  |SystemState.0x04|
00000010  09 32 35 09 30 33 3a 30  33 3a 34 38 2e 38 30 30  |.25.03:03:48.800|
00000020  09 4f 0a                                          |.O.|
00000023

有没有办法cmpdiff这两个文件并告诉cmp忽略不同的行终止字符?谢谢

2 个答案:

答案 0 :(得分:2)

假设: 您不想改变原始文件的行结尾

为避免创建临时文件,您可以使用process substitution

diff my_unix_file <(dos2unix < my_dos_file)
diff my_unix_file <(sed 's/\r//' my_dos_file)
diff my_unix_file <(tr -d '\r' < my_dos_file)

更新 (评论已转换为答案):感谢anishsane < / p>

答案 1 :(得分:2)

在OSX上,您可以使用此diff

diff osx-file.txt <(tr -d '\r' < win-file.txt)

tr -d '\r' < win-file.txt会从r中删除win-file.txt