差异文件用于空白更改,同时忽略缩进

问题描述 投票:0回答:1

我正在尝试查看我正在使用的格式化程序的效果。许多行都会有缩进更改,而少数行会有其他更改,例如左大括号和右大括号之间的换行符。我想忽略对缩进的所有更改,同时保留其他空白更改。

我想出的最佳解决方案就是用

sed
去除前导空白,然后将其输入
diff
:

diff <(sed 's/^\s*//' inputfile) <(sed 's/^\s*//' formattedfile)

但这也有一个缺点,就是为了显示差异而去掉缩进。

我有办法使用

diff
git diff
甚至其他我可以下载的工具来完成此操作吗?

diff git-diff
1个回答
0
投票

GNU diff 有

-Z
来忽略 尾随 空格。 我们可以滥用这个:

s2e()(sed -E 's/;/;</g; s/^([ \t]*)(.*)/\2;>\1/')
e2s()(sed -E 's/^([<>] )(.*);>([ \t]*)$/\1\3\2/;s/;</;/g')

diff -Z <(s2e<file1) <(s2e<file2) | e2s

对于

-u

e2s_u()(sed -E 's/^([ +-])(.*);>([ \t]*)$/\1\3\2/;s/;</;/g')

diff -Zu <(s2e<file1) <(s2e<file2) | e2s_u

基本上:

  • 使用某些字符作为转义符(
    ;
    )
  • 对所有出现的情况进行编码 (
    ;<
    )
  • 将前导空格移至分隔符后结束 (
    ;>
    )
  • 运行差异
  • 放回前导空格并删除分隔符
  • 解码转义字符
© www.soinside.com 2019 - 2024. All rights reserved.