在Bash中,你如何比较两个文件(不区分大小写)

时间:2014-09-27 01:17:38

标签: bash comparison glob

我想出了如何比较两个文件并使用它的状态代码来查看文件是否相同。问题是,它只有在比较区分大小写时才有效。我使用了cmp命令的状态代码。

我怀疑我要使用globbing(即“ [Aa] [Bb] [Cc] [等等......] ”)。但我不知道如何将其实现到cmp命令中。

2 个答案:

答案 0 :(得分:3)

在对案例进行规范化后,使用diffcmp快得多:

#!/bin/bash
# ^-- must not be /bin/sh, as process substitution is a bash/ksh/zsh feature

if cmp -s <(tr [a-z] [A-Z] <file1) <(tr [a-z] [A-Z] <file2); then
  echo "files are the same"
else
  echo "files differ"
fi

cmp -s特别快,因为它可以在找到第一个差异后立即退出。

这也更节省内存 - 它通过tr操作(在任何给定时间存储不超过一个缓冲区,每个文件的价值)流入内容到{{1} (同样,它只需要存储足以立即缓冲和比较)。与cmp类型算法相比较,该算法需要能够在文件中寻找相似的部分,因此IO或内存要求远远超出diff O(1)的使用范围

答案 1 :(得分:2)

有用于比较shell中2个文件的实用程序。

 diff -i file1 file2