我有两个文本文件,我希望确保它们是相同的,问题是 file1 (SELECT_20150210.txt
) 是在 windows 平台上生成的,而 file2 (sel.txt
) 是在 mac 上生成的,所以这两个文件具有不同的行终止字符,即使它们看起来相同:
第一行:
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
那么有没有办法cmp
或diff
这两个文件并告诉cmp
忽略不同的行终止符?谢谢
最佳答案
假设:您不想更改原始文件的行尾
为避免创建临时文件,您可以使用 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 完成了一些改进
关于linux - 比较/区分具有不同行终止符的两个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31220910/