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

标签 linux macos bash

我有两个文本文件,我希望确保它们是相同的,问题是 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

那么有没有办法cmpdiff 这两个文件并告诉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/

相关文章:

php - 返回 'No data received' 的 ODBC PDO

linux - apache storm 启动错误 normclasspath = cygpath if sys.platform == 'cygwin' else identity

ruby - 安装 byebug gem 时出错

java - Gradle IDEA 插件在 Mac 上找不到 JDK

vba - Word 2016 for mac - 任何类型的自定义控件

android - 如何在相同的 Ad-Hoc 模式下获取附近手机的 RSSI 和 Mac 地址?

c++ - 是否可以从可执行文件中取消链接目标文件

bash - For循环不工作ffmpeg

linux - 无法在 shell 脚本中使用 awk 命令进行打印

linux - 在 Linux 中根据文件中的文本拆分大文件的最快方法