ファイル内の単語のみを比較

ファイル内の単語のみを比較

比較する必要がある2つのファイルがあります。

問題は、インデントと改行の形式が異なるため、diff file1 file22つのファイルの出力全体が返されるだけです。

実際のテキストを除くすべてを無視する方法はありますか?

答え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 )

関連情報