我有2个源文件,它们是同一个东西的不同版本。但是,有人通过一个不同的编辑器进行缩进更改,所以所有的行都显示出不同的差异。
我是否可以使用diff命令或过滤器进行差异处理,以便在忽略前导空格/制表符后输出只是不同的行?
答案 0 :(得分:71)
diff
有一些对您有用的选项:
-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
所以diff -w old new
应该忽略所有空格,因此只报告截然不同的行。
答案 1 :(得分:1)
如果您使用的标签不正确,则为您 can fix that
expand bad_file
答案 2 :(得分:0)
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
和this is a line
行将与thisisaline
进行比较,并且不会报告差异
除了-w
选项问题之外,即使-b
选项也存在小问题,如果遇到行的话,也不会忽略空格
所以你应该使用sed
来删除首先出现的那些空格,然后执行`diff -bB。
diff -bB <(sed 's/^[ \t]*//' file1) <(sed 's/^[ \t]*//' file2)
答案 3 :(得分:0)
我的开源Linux工具'dif'在比较文件时忽略了空格等各种差异。
它还有许多其他选项,用于忽略注释或时间戳,对输入文件进行排序,进行搜索/替换,忽略某些行等。
预处理输入文件后,它会在这些中间文件上运行Linux工具meld,gvimdiff,tkdiff或kompare。
不需要安装,只需从https://github.com/koknat/dif下载并运行'dif'可执行文件
要将任何空格压缩为单个空格,请使用-white选项:
dif file1 file2 -white
要删除所有空格(换行符除外),请使用-nowhite选项:
dif file1 file2 -nowhite