2016-12-19 39 views
1

foo.c文件:忽略与反斜杠图案在diff命令

do {                
    a=b; 
    c=d; 
} while (0) 

文件bar.c

do {                
    a=b; 
    c=d; 
\ 
} while (0) 

在外壳脚本的上述2个文件的差异:

diff foo.c bar.c

< } while (0) 
--- 
>  \ 
> } while (0) 

我试图忽视使用

DIFF这个差异-I “REG-EX模式”

我试过像"\s}\swhile\s(0)","} while (0)"等模式,但没有用。是否可以忽略上述情况?如果不是“diff”,还有其他工具吗?

回答

0

你可以用sed删除不需要的行。然后忽略差异。

您有\

  • 的foo.c和bar.c

    1. 线之间的差异2有一个空间}之前foo.c中

    你可以做这样的事情:

    diff -I '\s\?}' <(sed '/^\\/d' bar.c) foo.c 
    

    删除行使用SED并忽略foo.c中

  • 0

    空间尝试这种情况:

    pat='^[[:space:]]*\\[[:space:]]*$' 
    sub_pat='s/'"$pat"'//' 
    diff -B -I "$pat" <(sed -e "$sub_pat" foo.c) <(sed -e "$sub_pat" bar.c) 
    

    第一行存储了正则表达式到pat变量用于下一diffsed和命令。正则表达式与带有反斜杠(\\)的行匹配,可以选择用空格字符包围它。

    sed命令用空字符串替换匹配$pat模式的行(-B选项导致diff忽略空行)。


    这是不可能从diff输出,而不额外的工具滤除反斜杠,除非唯一的区别是在包含图案的线被忽略:

    为每个不可忽略的变化,`差异“打印在其附近的一整套变化,包括可以忽略的变化。

    有关详细信息,请参阅this question的答案。