正規表現でdiffを使用するときにファイル名を保持する方法

正規表現でdiffを使用するときにファイル名を保持する方法

このdiffを使用して2つのファイルが異なるかどうかを示しますが、気にしない他の行を無視するには正規表現が必要です。ただし、設定方法によって違いを報告すると、ファイル名が変更されます。

diff -q --suppress-common-lines -B <(grep -vE '\s(name|timestamp|root)=' goldcopy.xml)  <(grep -vE '(\sname|timestamp|root)=' QJ03425234.xml)

「ファイル /dev/fd/63 と /dev/fd/62 が異なります」などの内容が報告されますが、ファイル名が必要なので、誰かがどのファイルで実行しているのかわからない場合でも、どのファイルがわかるのかがわかります。違う。

答え1

onelinerでは、diffは実際にはファイルではなく、シェルgrepによって動的に生成される2つのファイル記述子のそれぞれに共通の/dev/fd/63 /dev/fd/62名前です。<( command )慣用語が呼ばれます。プロセスの交換diffしたがって、明示的に指定しない限り、元のファイル名を直接知る方法はありません。--labelまたは-Lオプションの使用を検討してください。

F1=goldcopy.xml; F2=QJ03425234.xml;  diff  -L $F1  -q --suppress-common-lines -B <(grep -vE '\s(name|timestamp|root)=' $F1)  -L $F2 <(grep -vE '(\sname|timestamp|root)=' $F2) 

関連情報