diffを使用してファイルを比較するときは、テキスト以外のすべてを無視しますか?

diffを使用してファイルを比較するときは、テキスト以外のすべてを無視しますか?

ファイル比較コマンドの場合、テキストのみのdiffファイル比較に必要なオプションは何ですか?

私の言葉は、すべてのスペース、タブ、改行文字などを無視したいという意味です。

さまざまなオプションを試しましたが、目的の結果が得られませんでした。

答え1

ファイルを前処理してからストリームを比較できます。たとえば、trすべてのスペースと改行を削除します。

diff <( tr -d ' \n' <file1 ) <( tr -d ' \n' <file2)

サンプルファイルはaおよびで、bテキストは共有しますが、スペースと改行位置は共有しません。

cat a
1
2
3

cat b
1 2 3

diff -sq a b
Files a and b differ

diff -sq <( tr -d ' \n' <a ) <( tr -d ' \n' <b )
Files /dev/fd/63 and /dev/fd/62 are identical

気づく

  1. these words間に違いはありません。th esew ord s
  2. 削除したい文字には特別な注意を払う必要があります。
  3. diff出力ファイル名はファイル名ではなくストリーム名です。

man trタブなどの特殊文字を表示します。 (多分この[:space:]セットはあなたの要求に最も適しているかもしれません)

答え2

-wすべてのスペース(タブ、スペース:)とスペースの改行()を無視するには、次のように-Bします(GNU diffと仮定)。

$ diff -B -w file1 file2

または長いオプション(参照man diff)を使用して

$ diff --ignore-blank-lines --ignore-all-space file1 file2

これは本質的に前処理されたファイルと同じです(ただし、より説明的な出力があります)。例tr:

$ diff <(tr -d '[:space:]' < file1)  <(tr -d '[:space:]' < file2)

関連情報