繁体   English   中英

比较/区分具有不同行终止符的两个文件

[英]Compare/Diff two files with different line terminators

我有两个我希望确保相同的文本文件,问题是在Windows平台上生成了file1( SELECT_20150210.txt ),而在SELECT_20150210.txt上生成了file2( sel.txt ),因此这两个文件具有不同的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忽略不同的行终止符? 谢谢

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

为了避免创建临时文件,可以使用进程替换

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)

更新 (将评论转换为答案):由于使用了阿尼桑烷所以做了一些改进

在OSX上,您可以使用以下diff

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

tr -d '\\r' < win-file.txt将把rwin-file.txt删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM