(GNU)DIFFで、1つのファイル内で異なる行だけを印刷したいと思います。だから与えられた
==> diffa.txt <==
line1
line2 - in a only
line3
line4 changed
line5
==> diffb.txt <==
line1
line3
line4 changed in b
line5
line6 in b only
をお願いします diff --someoption diffa.txt diffb.txt
生産する
line2 - in a only
line4 changed
以下は、それが役立つはずのように見えますが、少し不可解です:
--GTYPE-group-format=GFMT
Similar, but format GTYPE input groups with GFMT.
--line-format=LFMT
Similar, but format all input lines with LFMT.
--LTYPE-line-format=LFMT
Similar, but format LTYPE input lines with LFMT.
LTYPE is `old', `new', or `unchanged'.
GTYPE is LTYPE or `changed'.
GFMT may contain:
%< lines from FILE1
%> lines from FILE2
diff
だけでそれができるかどうかはわかりませんが、他のGNUユーティリティの力をいつでも使用できます。
diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'
それはdiffを行い、次に '-'で始まる行のみを選択します-それらは変更され、diffa.txtファイルからの値を持ち、次にsed
はそれらの '-'記号を削除します。
編集:diff
をいくつか試した後、次のコマンドで必要なものが生成されるように見えます。
diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt
より簡単な方法は、comm
linuxユーティリティを使用することです(入力にはソートされたファイルが必要です)。標準出力に書き込みます。
diffa.txtに固有の行
diffb.txtに固有の行
一般的なライン
それに応じて、パラメーター1、2、または3でそれぞれを抑制できます。したがって、あなたの場合は次のようになります:
comm -23 diffa.txt diffb.txt
これは、diffb.txtに固有の行、共通の行を抑制し、diffa.txtにのみ固有の行を出力します。
comm
はソートされた入力ファイルを想定しているため、diff
とは異なる結果を報告することを述べておきます。
diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt
普遍的です。 @vavaへの称賛