Diffと比較すると、すべての行が変更されたことを示す2つのファイルがあります。それらをdiff -w
(空白を無視して)と比較すると、予想される最小限の変更がいくつか示されています。
明らかに、各ファイルの空白にはいくつかの違いがありますが、それらが何であるか、またはどのように見つけるかはわかりません。ファイルを編集して、空白が実際にはスペース文字(タブではなく)であることを確認しましたが、他に何をすべきかわかりません。
行末に末尾のスペースがないことを確認するために:set list on
でvimを使用しました。
Vimは行末に^M
を表示しなかったので、各ファイルにはLinuxの行末記号があると私は思います。
vim
ユーザーの場合、ファイル間の正確な違いを表示する便利なユーティリティがあります。
vimdiff file1 file2
これにより、各ファイルがウィンドウに並べて表示され、違いが色で強調表示されます。
vimdiff
にあるときに役立つコマンドvimdiff
にある間、いくつかの便利なコマンドは次のとおりです。
]c
:次の変更にジャンプ
[c
:前の変更にジャンプ
ctrl-W ctrl-W
:他のウィンドウに切り替え
zo
:折り畳みを開く
zc
:折りたたみを閉じる
次に、vimdiff
構成ファイルの2つのバージョンを比較するxterm
内のcups
の例を示します。
同じラインの長いセクションが折りたたまれていることがわかります。 zo
で再び開くことができます。
配色は、オプション設定によって異なります。上記の例では、1つのファイルに行が表示され、他のファイルには表示されない場合、その行には濃い青色の背景が与えられます。他のファイルでは、不足している行は破線で示されています。両方のファイルに線が表示されるが、いくつかの違いがある場合、線の変更されていない部分の背景はピンク色になり、変更された部分の背景は赤になります。
FreeBSDまたはほとんどのLinuxシステムでは、diffの出力をcat -v -e -t
にパイプして、空白の違いを表示できます。
diff file1 file2 | cat -vet
タブは^I
として表示され、$
は各行の終わりに表示されるため、末尾の空白を確認でき、印刷されない文字は^X
またはM-X
として表示されます。
GNU coreutils(ほとんどの非ビジーボックスLinuxディストリビューションで利用可能)がある場合、これは次のように簡略化できます。
diff file1 file2 | cat -A
Busyboxシステムでは、catv -vet
を使用します。
Windowsマシンで編集されたファイルの1つですか?
Windowsでの標準的な回線終端はCRLFですが、Linuxでは単純にLFです(MacではCRでしたが、OS X以降変更されていると思います)。
ファイルでwc -l
を試して、行数を確認し、サイズの違いが行数と同じかどうかを確認します(最後の行が1つのファイルで終了していない場合があります)。
od
が役立つことがあります。 Octal Dumpコマンドは、内容を16進数で表示できます。これは、nullバイトや予期しない空白を含む、ファイル内のバイトを確認するのに役立ちます。考えられる一般的な原因は、LF vs CRLF、タブvsスペース、またはASCII vs Unicode(通常、通常表示される各バイトの前にnullバイトがある場合があります)です。 。od -x filename
これらのパターンを明らかにする必要があります。より複雑な方法でファイルを表示したい場合は、「16進エディタ」を使用するとうまくいきます。 od
の良い点は、cut
コマンドと同様に、多くのUnixシステムに組み込まれていることです。そのため、多くの場合、個別にインストールする必要はありません。
より類似したファイルが必要な場合は、tr
がいくつかの変更を加え、sed
がさらに変更を加えることができます。私はおそらくls -l
は、どのファイルが大きいかを確認し、次にバイトを表示して何を変更する必要があるかを確認してから、ファイルの1つを変更して、より類似しているように見えるようにします。
実際の空白とタブがどこにあるかを見つけるには、sed
を使用してそれらを置き換えることができます。例:
$ cat file
line 1
line 2
line 6
line 7
$ sed 's/ /-/g; s/\t/<tab>/g' file
--line-1
--line-2
<tab>line-6
<tab><tab>line-7
次に、2つのファイルを比較します。
次の内容は、Romskiによって記述された上記の「質問」セクションからここにコピーされました。
vimdiff
とdiff file1 file2 | cat -A
はどちらも、ツールの観点から非常に役立ちました。
最後に、もう1つ問題が見つかりました。一部のファイルはUTF-8 BOMでエンコードされています。これはdiff file1 file2 | cat -A
を使用して強調表示されました。これは、影響を受けるファイルの先頭にM-oM-;M-?
として現れました。
$ diff file1 file2 | cat -A
< package com.mycompany;$
---$
> M-oM-;M-?package com.mycompany;$
いくつかの問題がありましたが、ファイルをクリーンアップする必要があるユーザーのために、以下にいくつかのコマンドをリストしました。
# recursively remove UTF8 BOM
find . -type f -exec sed -i -e '1s/^\xEF\xBB\xBF//' {} \;
# recursively replace CRLF with LF
find . -type f -print0 | xargs -0 dos2unix