我有 2 个源文件,它们是同一事物的不同版本。但是,已经通过不同的编辑器进行了缩进更改,因此所有行在 diff 中都显示不同。
是否有 diff 命令或过滤器可以用来区分,以便在忽略前导空格/制表符后输出只会是不同的行?
我有 2 个源文件,它们是同一事物的不同版本。但是,已经通过不同的编辑器进行了缩进更改,因此所有行在 diff 中都显示不同。
是否有 diff 命令或过滤器可以用来区分,以便在忽略前导空格/制表符后输出只会是不同的行?
diff
has some options that can be useful to you:
-E, --ignore-tab-expansion
ignore changes due to tab expansion
-Z, --ignore-trailing-space
ignore white space at line end
-b, --ignore-space-change
ignore changes in the amount of white space
-w, --ignore-all-space
ignore all white space
-B, --ignore-blank-lines
ignore changes whose lines are all blank
So diff -w old new
should ignore all spaces and thus report only substantially different lines.
diff -bB file[12]
-b, --ignore-space-change
ignore changes in the amount of white space
-B, --ignore-blank-lines
ignore changes whose lines are all blank
请注意,该-w
选项将在比较之前忽略所有空格,因此每个文件中类似this i s a line
andthis is a line
的行将比较为thisisaline
并且不会报告差异。
除了-w
选项问题之外,即使-b
选项也有一些小问题,如果出现在一行的乞求时,它也不会忽略空格
所以你应该sed
先删除那些在开始时出现的空格,然后执行`diff -bB.
diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)
如果一个人不正确地使用标签,你 可以修复它
expand bad_file
我的开源 Linux 工具 'dif' 比较文件,同时忽略包括空格在内的各种差异。
它有许多其他选项用于忽略注释或时间戳、对输入文件进行排序、进行搜索/替换、忽略某些行等。
在预处理输入文件后,它会在这些中间文件上运行 Linux 工具 meld、gvimdiff、tkdiff 或 kompare。
不需要安装,只需从https://github.com/koknat/dif下载并运行“dif”可执行文件
要将任何空格压缩为单个空格,请使用 -white 选项:
dif file1 file2 -white
要删除所有空格(换行符除外),请使用 -nowhite 选项:
dif file1 file2 -nowhite