diff
にはオプション-I regexp
があり、指定された正規表現に一致する行を挿入または削除するだけの変更は無視されます。変更が2つの行の間にある場合(行を挿入または削除する場合)は、これに類似したものが必要です。
たとえば、与えられたX
とY
について、"abXd"
と"abYd"
のようなすべての違いを無視したいと思います。
diff
にはそのような能力はないようです。 diff
の適切な代替手段はありますか?
sed
を使用して2つのファイルをフィルタリングし、不要な行を削除できます。一般的なパターンは/regex1/,/regex2/ d
2つの正規表現に一致する行の間のすべてを削除します。例えば:
diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)
John Kugelmanによる 以前の解決策 の改善:
diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)
おそらくあなたが探しているかもしれません!このバージョンでは、行自体を削除せずに、各行の特定の変更を正規化します。これにより、diffは行に残っているother違いを表示できます。
Sedを使用して、パターンのインスタンスを標準の文字列に置き換えることができます。
diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
XとYが単一の文字であるとすると、-I 'ab[XY]d'
は問題なく動作します。