文件foo.c:
do {
a=b;
c=d;
} while (0)
文件bar.c
do {
a=b;
c=d;
\
} while (0)
在shell脚本中,上述2个文件的差异为:
diff foo.c bar.c
< } while (0)
---
> \
> } while (0)
我试图使用
忽略这个差异diff -I“reg-ex pattern”。
我尝试了"\s}\swhile\s(0)"
,"} while (0)"
等模式。但没有用。有可能忽略上述情况吗?如果不是“差异”,任何其他实用程序?
答案 0 :(得分:1)
您可以通过使用sed删除不需要的行来实现。然后忽略差异。
foo.c和bar.c之间存在2个差异
\
}
之前有一个空格您可以这样做:
diff -I '\s\?}' <(sed '/^\\/d' bar.c) foo.c
使用sed删除\
行并忽略foo.c中的空格
答案 1 :(得分:1)
试试这个:
pat='^[[:space:]]*\\[[:space:]]*$'
sub_pat='s/'"$pat"'//'
diff -B -I "$pat" <(sed -e "$sub_pat" foo.c) <(sed -e "$sub_pat" bar.c)
第一行将正则表达式存储到pat
变量中,用于下一个diff
和sed
命令。正则表达式匹配带有反斜杠(\\
)的行,可选择用空格字符包围。
sed
命令将匹配$pat
模式的行替换为空字符串(-B
选项导致diff
忽略空行。)
如果没有额外的工具,就不可能从diff
的输出中过滤出反斜杠,除非唯一的区别在于包含被忽略的模式的行:
对于每个不可忽略的变化,`diff'打印其附近的一整套变化,包括可忽略的变化。
有关详细信息,请参阅this question的答案。