私には同じように見える2つのファイル(末尾の空白と改行を含む)がありますが、diffはまだそれらが異なると言っています。 diff -y
並べて比較すると、行はまったく同じに見えます。 diffからの出力は2つのファイル全体です。
何が原因なのでしょうか?
試してください:
diff file1 file2 | cat -t
-t
オプションを指定すると、cat
に特殊文字が明確に表示されます。 ^M
CRの場合、^I
タブ。
Manページ(OS X)から:
-t Display non-printing characters (see the -v option), and display tab characters as `^I'. -v Display non-printing characters so they are visible. Control characters print as `^X' for control-X; the delete character (octal 0177) prints as `^?'. Non-ASCII characters (with the high bit set) are printed as `M-' (for meta) followed by the character for the low 7 bits.
違いは、DOSとUNIXの行末、または同様の何かによって引き起こされるのでしょうか?
あなたがそれらをhexdump
した場合はどうなりますか?これにより、より明確に違いが示される場合があります。例:
hexdump -C file1 > file1.hex
hexdump -C file2 > file2.hex
diff file1.hex file2.hex
確認されたことが判明した私の最初の推測は、ファイルが異なる行末を使用していることです。これは、末尾の空白の存在(ただし、通常は多くの行でそれが得られない)または異なるインデント(タブとスペース)など、空白のその他の違いである可能性があります。次のように、空白と制御文字を表示形式で出力するコマンドを使用します。
diff <(cat -A file1) <(cat -A file2)
diff <(sed -n l file1) <(sed -n l file2)
最初に正規化することで、違いが行末のみに関係していることを確認できます。 dos2unix
ユーティリティ;そうでない場合は、余分なCR(^ M、\ r、\ 015)文字を明示的に削除します。
diff <(tr -d '\r' <file1) <(tr -d '\r' <file2)
または、file1
はDOSで終わるものです
tr -d '\r' <file1 | diff - file2