GNU/Linux >> Znalost Linux >  >> Linux

Rozdílový příkaz v Linuxu s příklady

Pokud jde o porovnání souborů, většinou se používá software založený na GUI. Pokud jste uživatelem Linuxu, pak si myslím, že byste měli vědět, jak porovnat dva soubory pomocí příkazového řádku, protože je to rozhodně rychlá metoda, jakmile si na ni zvyknete.

V tomto tutoriálu se na několika praktických příkladech naučíme, jak používat příkaz diff.

Linuxový příkaz diff

Pojďme porozumět příkazu diff v Linuxu pomocí několika praktických příkladů.

Předpokládejme, že máme tyto dva soubory (soubor1 a soubor2):

$ cat file1
Hi,
Hello,
How are you?
I am fine,
Thank you.
$ cat file2
Hello,
Hi,
How are you?
I am fine.

Můžete vidět, že oba soubory mají nějaké drobné rozdíly. Nyní se podívejme, jak lze použít příkaz diff k odhalení těchto rozdílů.

Zde je návod, jak spustit příkaz diff:

$ diff file1 file2
1d0
< Hi, 2a2 > Hi,
4,5c4
< I am fine,
< Thank you.

---

> I am fine.

Takže můžete vidět, že příkaz diff byl poskytnut jak s názvy souborů jako argumenty příkazové řádky, tak vytvořil rozdíly ve výstupu. Výstup není v žádném případě snadno srozumitelný. Důvodem je, že byl navržen tak, aby jej používali počítače a ne lidé. Nicméně dekódujme výstup kus po kuse:

POZNÁMKA - Soubory soubor1 a soubor2 budou v následujícím textu označeny jako starý soubor a nový soubor.

1d0
< Hi,

Zde řádek 1d0 znamená, že 1. řádek starého souboru by měl být smazán (d), aby se synchronizovaly oba soubory začínající na řádku 0. Řádek, který má být odstraněn ve starém souboru, je uveden hned pod značkou <.

2a2
> Hi,

Zde řádek 2a2 znamená, že druhý řádek z nového souboru by měl být přidán za druhý řádek starého souboru. Řádek, který má být přidán, se zobrazí na dalším řádku výstupu se značkou>.

4,5c4
< I am fine,
< Thank you.

---

> I am fine.

Zde řádek 4,5c4 znamená, že čísla řádků od 4 do 5 ve starém souboru jsou nyní změněna a měla by být nahrazena 4. řádkem nového souboru. Řádky, které mají být přidány a odstraněny, jsou označeny> a <.

Takže závěrem,

  • První argument příkazu diff je považován za starý soubor, zatímco druhý argument se stane novým souborem.
  • Výrazy jako 1d0 2a2, 4,5c4 lze dekódovat pomocí syntaxe [číslo řádku nebo rozsah ze starého souboru][akce][číslo řádku nebo rozsah z nového souboru] . Kde lze „akci“ přidat, odstranit nebo změnit – tedy nahradit.
  • Značka představuje řádek, který má být přidán.

Kromě souborů lze příkaz diff použít také k porovnání dvou adresářů. Pojďme se to naučit na příkladu.

Zde je obsah adresáře s názvem 'new_dir':

$ ls new_dir/
file file2 frnd frnd1.cpp log1.txt log3.txt log5.txt
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt

a zde je obsah adresáře s názvem 'old_dir' :

$ ls orig_dir/
file1 file name with spaces frnd1 frnd.cpp log2.txt log4.txt test
file2 frnd frnd1.cpp log1.txt log3.txt log5.txt

Nyní je zde výstup při provedení příkazu diff:

$ diff new_dir/ orig_dir/
Only in new_dir/: file
Only in orig_dir/: test

Takže můžete vidět, že když se provede příkaz diff pro porovnání těchto dvou adresářů, snadno zobrazí chybějící soubory v adresářích.

Zde jsou některé z běžně používaných možností příkazového řádku:

1) Použijte -i k ignorování velkých a malých písmen

Pokud dva soubory obsahují stejný text, ale v různých případech, příkaz diff to stále hlásí jako rozdíl ve výchozím nastavení.

Například:

$ cat file1
HI
$ cat file2
hi
$ diff file1 file2
1c1
< HI --- > hi

Takže můžete vidět, že příkaz diff hlásil rozdíl velkých a malých písmen ve výstupu.

Chcete-li se zbavit tohoto výchozího chování, použijte volbu -i.

Zde je příklad:

$ diff -i file1 file2
$

Můžete tedy vidět, že nebyl vytvořen žádný výstup, což je výchozí chování, když jsou oba soubory stejné.

2) Nahlaste, že soubory jsou stejné pomocí volby -s

Ke konci příkladu 1 jsme viděli, že diff nic nehlásí, pokud jsou soubory stejné. Toto výchozí chování je sice v pořádku, ale stále může mnoho zmást, zejména nováčky. Pokud tedy chcete, aby příkaz diff explicitně hlásil, že soubory jsou stejné, použijte volbu příkazového řádku -s.

Zde je příklad:

$ diff -is file1 file2
Files file1 and file2 are identical

Takže můžete vidět, že jsem přidal volbu -s do příkazu, který jsme použili v minulém příkladu, a tentokrát příkaz diff výslovně hlásil, že oba soubory jsou totožné.

3) Použijte -b k ignorování mezer

Dalším běžným případem použití je různé množství mezer, pro které příkaz diff hlásí soubory jako různé.

Zde je příklad:

$ cat file1
Hi, how are you?

$ cat file2
Hi, how are  you?

Všimněte si, že jediný rozdíl mezi tažnými soubory je mezera navíc mezi slovy „jste“ a „vy“ v souboru2. Nyní, když je k porovnání těchto dvou souborů použit příkaz diff, zde je výstup:

$ diff file1 file2
1c1
< Hi, how are you?

---

> Hi, how are  you?

Takže můžete vidět, že příkaz diff hlásil rozdíl. Ale pokud chcete, aby diff ignoroval tyto mezery, použijte volbu -b :

$ diff -b file1 file2
$

Takže můžete vidět, že díky volbě -b příkaz diff hlásil oba soubory jako stejné.

Tip k příkazu:

Níže uvedený příkaz zobrazí všechny rozdíly mezi soubory mezi dvěma složkami

diff -Naur old/ new/

Příkaz diff poskytuje mnohem více možností příkazového řádku. Úplný seznam najdete na jeho manuálové stránce.


Linux
  1. Třídit příkaz v Linuxu s příklady

  2. příkaz chattr v Linuxu s příklady

  3. JQ Command v Linuxu s příklady

  1. wc Linux Command s příklady

  2. V příkladech příkazů v Linuxu

  3. soubor Příklady příkazů v Linuxu

  1. 10 Quick Linux Tail Command s příklady

  2. 9 diff Příklady příkazů v Linuxu

  3. Linux ip příkaz s příklady