web-dev-qa-db-ja.com

差分、正しいファイルからのみ変更された行を表示

ファイルabがあり、bからクローンされてから変更されたaの行を出力したいと思います。変更された行のみ、周囲のコンテキスト、差分オフセットマークはありません。

シェルスクリプトを使用してどうすればよいですか? (Python/Perl/PHP/...なし)

Sedとawkは許容できるソリューションです。

今のところ、私がやっていることは--suppress-common-linesを付けたdiff -yで、正規表現の後方参照を使用してsedし、空白の後に正しい部分をフェッチするだけです。もっと良い方法があるに違いない?

Perl(これは禁止されています)を使用して、私は次のようなことをします:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | Perl -pe 's/.*\t|\t(.*)$/\1/g'
26
Robottinosino

GNU diffutilsパッケージのdiffを使用すると、変更または新しく挿入されたファイルbの行のみが出力されます。

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
38
manatwork

オプションをもう1つ追加する必要があります。

grep -vf file1 file2
6
Sri
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
4
1kenthomas