ファイル比較コマンドの場合、テキストのみの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
気づく
these words
間に違いはありません。th esew ord s
- 削除したい文字には特別な注意を払う必要があります。
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)