私はA1とA2の2つのファイル(ソートされていない)を持っています。 A1はA2の前のバージョンであり、A2にはいくつかの行が追加されています。 A2に追加された新しい行を取得するにはどうすればよいですか?linuxの2つのファイルの違いを取得する方法(追加のみ)
注:私はちょうど新しい行が追加され、A1にあったがA2で削除された行は必要ありません。私がdiff A1 A2
をするとき、私は追加だけでなく、削除を得るが、私は追加が欲しい。
これを行う方法を提案してください。
私はA1とA2の2つのファイル(ソートされていない)を持っています。 A1はA2の前のバージョンであり、A2にはいくつかの行が追加されています。 A2に追加された新しい行を取得するにはどうすればよいですか?linuxの2つのファイルの違いを取得する方法(追加のみ)
注:私はちょうど新しい行が追加され、A1にあったがA2で削除された行は必要ありません。私がdiff A1 A2
をするとき、私は追加だけでなく、削除を得るが、私は追加が欲しい。
これを行う方法を提案してください。
簡単な方法は、あなたが入力できますが、Comparing 2 unsorted lists in linux, listing the unique in the second file
に見ることができるように、もう一つの方法は、COMMを使用することです
sdiff A1 A2
を使用することです試してみてください
差分--changedグループ-フォーマット= '%>' --unchangedグループ-フォーマット= '' A1 A2
ファイル 'A1'には' x'という行が含まれ、ファイル 'A2'には' x'という行と 'xx'というファイルがあると仮定します。 '。 'A2'の両方の行に' x'が含まれているので、このコマンドは何も出力しません。 – timrau
あなたがすることができます
diff -u A1 A2 | grep -E "^\+"
これらのオプションを説明してもらえますか?マニュアルページからそれらを得ることはできません – user1004985
詳細については、このリンクを参照してください[ライングループのフォーマット](http://www.gnu.org/software/diffutils/manual/html_node/Line-Group -Formats.html) – merp
以下TomOnTimeのserverfaultの答えhere @から直接コピーされるのすべて:
ファイルaにのみ存在する行を表示します(つまり一つだけのファイルや他に存在する(すなわちBに追加されたもの)
comm -13 a b
表示ライン:(のみファイルbに存在するA)
comm -23 a b
ショーラインから何を削除しました両方ではなく)
comm -3 a b | sed 's/^\t//'
(警告:ファイルa
はTABで始まる行がある場合は、それ(最初TAB)は出力から削除されます)
注: "comm"が正しく動作するためには、両方のファイルをソートする必要があります。彼らはすでにソートされていない場合は、それらを並べ替える必要があります。
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
ファイルが極端に長い場合、それは余分なコピーため、2倍のディスクスペースを必要として、これはかなりの負担かもしれません。
編集:(おかげでコメント@phkため)コマンドは、プロセス置換を使用して、より簡潔に書くことができることに注意してください。
comm -12 <(sort < a) <(sort < b)
@phkありがとうございました。 – scottkosty
git diff path/file.css | grep -E "^\+" | grep -v '+++ b/' | cut -c 2-
grep -E "^\+"
は、前の受け入れ答えから、それが不完全です非ソースのものを残すのでgrep -v '+++ b'
は、ファイル名が後のバージョンcut -c 2-
の非ソース行を削除しますemoves +
サインの列は、またsed 's/^\+//'
comm
またはsdiff
が原因のgitのオプションではありませんでした使用することができます。
ベスト回答!これは、追加された行とまったく同じ行を返します。これは私が考える受け入れられた答えでなければなりません –
は、すべてファイルにA2の新しい行が追加されていますか?私は既存の行と重複しないことを意味しますか? – Kent
@kent no duplicates – user1004985