質問

diff オプションがあります -I regexp, 、指定されたregexpに一致する行を挿入または削除するだけの変更を無視します。変更のために、これのアナログが必要です。変更が2行の間にある場合(挿入または削除するのではなく)。

たとえば、私はの間のすべての違いを無視したい "abXd""abYd", 、与えられた XY.

そうみたいです diff そのような能力はありません。適切な代替手段はありますか diff?

役に立ちましたか?

解決

2つのファイルを介してフィルタリングできます sed 気にしない線を排除するため。一般的なパターンはです /regex1/,/regex2/ d 2つの正規表現に一致する線間の何かを削除します。例えば:

diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)

他のヒント

の改善 以前の解決策 ジョン・クゲルマン:

diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)

おそらくあなたが探しているかもしれないものです!このバージョンは、行自体を削除することなく、各行の特定の変更を正規化します。これにより、diffは任意の表示を可能にします 他の ラインに残っている違い。

xとyが単一文字であると仮定します -I 'ab[XY]d' 私のためにはうまくいきます。

SEDを使用して、パターンのインスタンスを標準文字列に置き換えることができます。

diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top