我有2个源文件,它们是同一事物的不同版本。但是,已经通过另一种编辑器进行了缩进更改,因此所有行在diff中的显示都不同。
是否可以使用diff命令或过滤器与diff进行比较,以便在忽略前导空格/制表符后输出仅是不同的行?
Answers:
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
应忽略所有空格,从而仅报告实质上不同的行。
diff
我们忽略像e和pi这样的先验数字的等价级数展开吗?
-w
。-tb
,-tbB
,-t
,等在一些差异全部泄漏,你更愿意忽视。-w
不会,即使它也可能排除您希望看到的一些差异。
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)
我的开源Linux工具“ dif”在比较文件时忽略了包括空格在内的各种差异。
它还有许多其他选项,可用于忽略注释或时间戳,对输入文件进行排序,进行搜索/替换,忽略某些行等。
预处理输入文件后,它将在这些中间文件上运行Linux工具meld,gvimdiff,tkdiff或kompare。
不需要安装,只需从https://github.com/koknat/dif下载并运行'dif'可执行文件
要将任何空格压缩为单个空格,请使用-white选项:
dif file1 file2 -white
要删除所有空格(换行符除外),请使用-nowhite选项:
dif file1 file2 -nowhite
-w
有效地从线所有空白比较之前,所以ab
和a b
被认为是相同的。我更喜欢,-b
因为它忽略了空格更改,这意味着ab
和a b
被认为是不同的,但是a b
和a
+ +多个空格+b
(对不起,mini-Markdown不允许在代码中使用多个空格!)被视为相同。