2016-12-19 13 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) 

私は

デフ-I "REG-EXパターン"を使用して、この差分を無視しようとしています。

"\s}\swhile\s(0)","} while (0)"などのようなパターンを試しましたが、使用しません。上記のケースを無視することはできますか? "diff"でなければ、他のユーティリティ?

答えて

0

これは、不要な行をsedで削除することで可能です。そして、その違いを無視する。

あなたはこのような何かを行うことができたfoo.c

}の前にスペースがあり\

  • とのfoo.cとbar.cに間に2の違い

    1. ラインを持っています:

      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) 
    

    最初の行は次のdiffsedコマンドに対してpat変数に正規表現を格納します。正規表現は、オプションでスペース文字で囲まれたバックスラッシュ(\\)の行と一致します。

    sedコマンドは、$patパターンに一致する行を空文字列に置き換えます(-Bオプションを指定すると、空白行は無視されます。diff)。各nonignorable変更の

    `、:唯一の違いは無視されているパターンを含む行である場合を除き


    余分な工具を使わずdiffの出力からバックスラッシュをフィルタリングすることは不可能ですdiff 'は、無視できるものを含め、その付近の変更の完全なセットを出力します。

    this questionの回答を参照してください。

    関連する問題