使用 diff 比较文件时忽略除文本之外的所有内容?

使用 diff 比较文件时忽略除文本之外的所有内容?

对于文件比较命令diff,仅比较文本的文件比较需要哪些选项?

我的意思是我想忽略所有空格、制表符、换行符等。

我一直在尝试不同的选择,但未能达到预期的结果。

答案1

您可以预处理文件,然后比较流。例如用于tr删除所有空格和换行符。

diff <( tr -d ' \n' <file1 ) <( tr -d ' \n' <file2)

示例文件是a和 ,b它们共享文本但不共享空格和换行符位置:

cat a
1
2
3

cat b
1 2 3

diff -sq a b
Files a and b differ

diff -sq <( tr -d ' \n' <a ) <( tr -d ' \n' <b )
Files /dev/fd/63 and /dev/fd/62 are identical

注意

  1. these words这在和之间没有区别th esew ord s
  2. 你必须特别注意要删除的字符
  3. diff的输出文件名是流名称而不是文件名

查看man tr特殊字符,例如制表符等(也许该[:space:]集最符合您的需求)

答案2

如果您只想忽略所有空白(制表符、空格:)-w和空白换行符(-B),则(假设 GNU diff):

$ diff -B -w file1 file2

或者,使用长选项(请参阅man diff),

$ diff --ignore-blank-lines --ignore-all-space file1 file2

这与预处理文件基本相同(但更具描述性输出),例如tr

$ diff <(tr -d '[:space:]' < file1)  <(tr -d '[:space:]' < file2)

相关内容