
1 行だけのファイルがあります。サイズは約 20,000 バイトです。
ファイルが変更されたので、どこが変更されたのかを知りたいです。
diff を使用することを考えましたが、差分のある行を出力するため、完全な行が表示されます。ただし、この場合は、ファイル内で差分があるのは 1 行だけです。
それで、その違いが何なのか知りたかったのです。
何かアドバイス?
答え1
通常のテキストと同様に空白が多数あると仮定すると、ファイルを単語ごとに分割し、通常の diff ツール (たとえば、meld) を使用して比較できます。
tr -s ' ' '\n' < file1.txt > file1.txt.split
tr -s ' ' '\n' < file2.txt > file2.txt.split
meld file1.txt.split file2.txt.split
答え2
答え3
これが一度限りの問題であれば、50 文字ごとに文字を挿入したファイルのコピーを作成し\n
、それらのコピーを比較します。(50 を選択したのは、元のファイルの異なる行番号からバイト オフセットまでの計算が簡単になるためですが、結果に基づいて上下に調整する可能性があります。)
答え4
私はgit diff
、--word-diff=porcelain
このようなタスクにオプションが役立つことを発見しました。たとえば、1 文字だけ異なる長い行を持つ 2 つのファイルがある場合、出力を でパイプしてgrep
変更された行と変更をフィルターし、grep
もう一度 でパイプして各行の最後の 80 文字のみを表示できます。
echo {1..4000} A {4001..8000} > a.tmp
echo {1..4000} B {4001..8000} > b.tmp
> git diff -U0 --word-diff=porcelain a.tmp b.tmp | grep -A3 '@@' | egrep -o '.{1,80}$'
@@ -1 +1 @@
3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000
-A
+B