对于文件比较命令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
注意
these words
这在和之间没有区别th esew ord s
- 你必须特别注意要删除的字符
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)