出力タグを使用して、ソートされていない2つのテキストファイルを区別する必要があります。すべて動作が古い、新しく、変更されていません。これらのタグは行の先頭または末尾に表示され、このタグで示されている行以外には出力があってはなりません。
たとえば、次の2つのファイルがあるとします。
old.txt
unchanged line one
unchanged line two
unchanged line three
deleted line one
deleted line two
deleted line three
unchanged line four
unchanged line five
unchanged line six
new.txt
unchanged line one
unchanged line two
unchanged line three
unchanged line four
unchanged line five
inserted line one
inserted line two
inserted line three
unchanged line six
GNU diffを使用すると、古い、新しい、および変更されていない「入力グループ」の印刷形式を指定できますが、これらの形式は、古い/新しい/変更されていない行の最初の行にのみ適用されます。たとえば、実行diff --old-group-format='- %<' --new-group-format='+ %>' --unchanged-group-format='| %=' old.txt new.txt
結果は次のようになります。
| unchanged line one
unchanged line two
unchanged line three
- deleted line one
deleted line two
deleted line three
| unchanged line four
unchanged line five
+ inserted line one
inserted line two
inserted line three
| unchanged line six
ただし、各行にタグ付けされる次の違いが必要です。
| unchanged line one
| unchanged line two
| unchanged line three
- deleted line one
- deleted line two
- deleted line three
| unchanged line four
| unchanged line five
+ inserted line one
+ inserted line two
+ inserted line three
| unchanged line six
GNU diffを単独で使用するか、sedなどの他の一般的なコマンドラインテキスト処理ツールと組み合わせて使用できますか?手間がかからない場合は、移植可能な(POSIX)ソリューションがより良い可能性があります。
答え1
GNU は行diff
形式とグループ形式をサポートしています。
$ diff --old-line-format='- %L' --new-line-format='+ %L' --unchanged-line-format='| %L' old.txt new.txt
| unchanged line one
| unchanged line two
| unchanged line three
- deleted line one
- deleted line two
- deleted line three
| unchanged line four
| unchanged line five
+ inserted line one
+ inserted line two
+ inserted line three
| unchanged line six