比較する必要がある2つのファイルがあります。
問題は、インデントと改行の形式が異なるため、diff file1 file2
2つのファイルの出力全体が返されるだけです。
実際のテキストを除くすべてを無視する方法はありますか?
答え1
diff -w
すべての水平スペースの変更を無視します。これはインデントを処理しますが、行が別の幅に改行された場合、またはテキストが変更された後に行が改行された場合は役立ちません。
テキスト形式によっては、比較出力を使用する場合fmt
と使用できない場合があります。
diff -u --label=file1 <(fmt file1) --label=file2 <(fmt file2)
設置可能な場合違い、この記事の全体的な目的は、あなたが直面している問題を解決することです。 EPELで購入可能です。
Gitにはこの機能が組み込まれています。 Gitリポジトリの外部でも機能します。
git diff --word-diff file1 file2
答え2
wdiff
(「単語の違い」)を使用することができます:
$ cat file1
this is file 1, it is
two lines long
$ cat file2
this is file 2,
it is
three lines long
$ wdiff file1 file2
this is file [-1,-] {+2,+}
it is
[-two-]
{+three+} lines long
$ wdiff --no-common file1 file2
======================================================================
[-1,-] {+2,+}
======================================================================
[-two-]
{+three+}
======================================================================`
答え3
試してみてくださいmeld
。非常に強力な(ただしグラフィックであるにもかかわらず)ファイル比較ツールであり、CentOSで使用できます。
答え4
Diffにはいくつかのオプションがあります。
-i, --ignore-case
ignore case differences in file contents
-E, --ignore-tab-expansion
ignore changes due to tab expansion
-Z, --ignore-trailing-space
ignore white space at line end
-b, --ignore-space-change
ignore changes in the amount of white space
-w, --ignore-all-space
ignore all white space
-B, --ignore-blank-lines
ignore changes whose lines are all blank
--strip-trailing-cr
strip trailing carriage return on input
単語が実際に行間を移動する場合、各入力ファイルを単語ストリームに縮小して比較することができます。しかし、これはこの言葉がどこから来たのかという多くの文脈を失います。これは、単語を「英数字文字列」として表示し、単語レベルで順次比較する。
diff <( tr -cs [:alnum:] '\n' < file1 ) <( tr -cs [:alnum:] '\n' < file2 )