GNU/Linux >> Znalost Linux >  >> Linux

Jak porovnat tři soubory v Linuxu pomocí nástroje diff3

V jednom z našich dřívějších výukových programů jsme diskutovali o nástroji příkazového řádku systému Linux – nazvaný diff – který vám umožňuje porovnávat dva soubory řádek po řádku. Ale co když je požadavek porovnávat ne dva, ale tři soubory? Ano, i pro toto existuje nástroj příkazového řádku pro Linux a správně se nazývá diff3 .

Pokud jste hledali takový nástroj, pak už nehledejte, protože v tomto tutoriálu vysvětlíme použití diff3 na snadno srozumitelných příkladech.

But before we move forward, we would like you to know that all the examples mentioned in this tutorial have been tested on Ubuntu 14.04 with bash version 4.3.11(1), and the version of diff3 that we've used is 3.3.

Instalovat diff3

Nástroj diff3 bude pravděpodobně ve výchozím nastavení na vašem systému nainstalován – alespoň na Ubuntu je. Ale pokud tomu tak není, nemějte obavy, protože to můžete snadno provést instalací balíčku GNU Diffutils. Pokyny ke stažení a instalaci balíčku do vašeho systému naleznete zde.

Použití Diff3

Protože obslužný program diff3 porovnává tři soubory, pro naše příklady použití budeme muset vzít tři soubory, které předáme jako vstup do nástroje.

Zde je soubor1:

This is line1 with some change
This is line2
This is line3

Zde je soubor2:

This is line1
This is line2
This is line3

A tady je soubor3:

This is line1
This is line2
This is line3

Je jasné, že pokud vidíme obsah těchto tří souborů, jediná změna je v prvním řádku prvního souboru. Nyní se tedy podívejme, jak diff3 hlásí tuto změnu.

Zde je návod, jak můžeme v tomto případě použít diff3:

diff3 file1 file2 file3

A zde je výstup, který produkuje:

====1
1:1c
This is line1 with some change
2:1c
3:1c
This is line1

Výstup můžete pochopit následujícím způsobem:

  • První řádek, který začíná čtyřmi znaky '=' a končí číslem '1' říká, že změna je v prvním souboru.
  • Na dalším řádku první '1' znamená soubor1; '1c' za dvojtečkou 'znamená, že první řádek obsahuje'. Skutečný řádek se zobrazí na dalším řádku výstupu.
  • Podobně 2:1c a 3:1c znamenají „první řádek souboru2 a souboru3 obsahují“. A protože obsah řádku je v obou souborech stejný, skutečný řádek se zobrazí pouze jednou, na konci výstupu.

Aby to bylo jasnější, uveďme další případ, kdy je změna v souboru 3.

Zde je soubor1:

This is line1
This is line2
This is line3

Zde je soubor2:

This is line1
This is line2
This is line3

A tady je soubor3:

This is line1 with some change
This is line2
This is line3

Příkaz zůstává stejný:

diff3 file1 file2 file3

A tady je výstup:

====3
1:1c
2:1c
This is line1
3:1c
This is line1 with some change

Takže výstup v tomto případě lze chápat jako:

  • Změna je v souboru 3
  • Soubor1 i soubor2 obsahují jako první řádek „Toto je řádek1“
  • Zatímco soubor3 obsahuje jako první řádek "Toto je řádek1 s některými změnami".

To bylo vše o tom, jak se zprávy diff3 mění v řádcích. Nyní se podívejme, jak se diff3 chová, pokud jeden ze souborů obsahuje další řádek:

Zatímco soubor1 a soubor2 zůstávají stejné, zde je soubor3:

This is line1
This is line2
This is line3
This is line4

Jak je zřejmé z obsahu, soubor3 nyní obsahuje na konci další řádek.

Spusťte stejný příkaz diff3:

diff3 file1 file2 file3

A zde je výstup, který příkaz vytvoří:

====3
1:3a
2:3a
3:4c
This is line4

Výstup začíná sdělením, že změna je v souboru3. Změna je ve čtvrtém řádku souboru3 (3:4c), což je ve srovnání s file1 a file2 zcela nový řádek.

To, o čem jsme dosud diskutovali, byly některé jednoduché případy. Vezměme si pár trochu složitějších situací. Zvažte například soubor1, soubor2 a soubor3 jako obsahující následující:

This is line1
This is line2 with some change
This is line3
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3 with some change

Takže nyní oba soubor1 a soubor2 obsahují změny, a to také v různých řádcích. Podívejme se, co v tomto případě vytvoří diff3:

====
1:2,3c
This is line2 with some change
This is line3
2:2,3c
This is line2
This is line3
3:2,3c
This is line2
This is line3 with some change

Jak můžete vidět na výstupu zobrazeném výše, první řádek neobsahuje žádné číslo. Je to proto, že změny nyní obsahuje ne jeden, ale více souborů. U diff3 jsou nyní řádky 2 a 3 všech tří souborů odlišné. To je důvod, proč místo jednoho čísla za dvojtečkou (:) nyní výstup obsahuje rozsah - '2,3', což znamená řádek 2 až řádek 3.

Vezměme si ještě jeden příklad. Předpokládejme, že tentokrát tyto tři soubory obsahují následující informace: 

This is line1
This is line2
This is line3
This is line4
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3
This is line4
This is line5

Nyní, když je příkaz diff spuštěn, vytváří následující výstup:

====
1:4c
This is line4
2:3a
3:4,5c
This is line4
This is line5

Zde, pokud se pokusíte porozumět, příkaz diff3 říká, že změny jsou po řádku 3 ve všech třech souborech. Zatímco soubor1 obsahuje řádek "Toto je řádek4" jako čtvrtý řádek, soubor3 obsahuje jako čtvrtý a pátý řádek "Toto je řádek4" a "Toto je řádek5". Na druhou stranu soubor2 má pouze 3 řádky.

Takže to bylo vše o základní práci na diff3. Co to stojí za to, zde je to, co o nástroji říká oficiální dokumentace:"Můžete použít diff3 příkaz pro zobrazení rozdílů mezi třemi soubory. Když dva lidé provedli nezávislé změny společného originálu, diff3 může hlásit rozdíly mezi původní a dvěma změněnými verzemi a může vytvořit sloučený soubor, který obsahuje změny obou osob spolu s varováními o konfliktech.".

Závěr

Právě jsme zde poškrábali povrch, Diff3 toho dokáže mnohem víc. Jak například uvádí i oficiální dokumentace, můžete jej použít i ke sloučení změn. Navíc existuje mnoho možností příkazového řádku, které vám umožní přizpůsobit výstup příkazu a také získat přístup k některým dalším funkcím, které nabízí. Je to všechno na stránce manuálu, projděte si to.


Linux
  1. Jak spravovat soubory protokolu pomocí Logrotate v Linuxu

  2. Jak restartovat Linux pomocí příkazového řádku

  3. 11 Příklady příkazů Linux diff3 (Porovnejte 3 soubory řádek po řádku)

  1. Jak vypnout nebo restartovat Linux pomocí příkazového řádku

  2. Jak obnovit smazané soubory v systému Linux pomocí nástroje pro obnovu dat Scalpel?

  3. Jak třídit soubory v Linuxu pomocí příkazu Sort

  1. Jak vytvořit soubor v Linuxu pomocí terminálu/příkazového řádku

  2. Jak provádět řádkové porovnání souborů v Linuxu pomocí příkazu diff

  3. Jak porovnám binární soubory v Linuxu?