Како упоредити две текстуалне датотеке у Линук терминалу

Требате да видите разлике између две ревизије текстуалне датотеке? Онда је дифф команда која вам је потребна. Овај водич вам показује како да користите дифф на Линук-у и мацОС-у, на једноставан начин.

Роњење у дифф

Команда дифф упоређује две датотеке и производи листу разлика између њих. Да буде тачније, производи листу измена које би требало да се изврше у првој датотеци, да би она одговарала другој датотеци. Ако то имате на уму, лакше ћете разумети излаз из дифф. Команда дифф је дизајнирана да пронађе разлике између датотека изворног кода и да произведе излаз који други програми могу читати и на њих реаговати, као што је закрпа команда. У овом водичу ћемо погледати најкорисније начине коришћења дифф.

Хајдемо одмах да анализирамо две датотеке. Редослед датотека у командној линији одређује коју дифф датотеку сматра „првом датотеком“, а коју „другом датотеком“. У примеру испод алпха1 је прва датотека, а алпха2 је друга датотека. Обе датотеке садрже фонетско писмо али други фајл, алпха2, је додатно уређиван тако да две датотеке нису идентичне.

Можемо да упоредимо датотеке са овом командом. Откуцајте дифф, размак, име прве датотеке, размак, име друге датотеке, а затим притисните Ентер.

diff alpha1 alpha2

Како да сецирамо тај резултат? Једном када знате шта да тражите, није тако лоше. Свака разлика је редом наведена у једној колони, а свака разлика је означена. Ознака садржи бројеве са обе стране слова, на пример 4ц4. Први број је број линије у алфа1, а други број је број линије у алфа2. Слово у средини може бити:

ц: Ред у првој датотеци треба да се промени тако да одговара реду у другој датотеци.
д: Ред у првој датотеци мора бити обрисан да би одговарао другој датотеци.
а: Додатни садржај мора бити додат првој датотеци да би одговарао другој датотеци.

4ц4 у нашем примеру нам говори да линија четири од алфа1 мора да се промени тако да одговара линији четири од алфа2. Ово је прва разлика између две датотеке које је пронашао дифф.

Редови који почињу са односе се на другу датотеку, алпха2. Ред Даве нам говори да је реч Даве садржај четвртог реда у алфа2. Да резимирамо, морамо да заменимо Делта са Даве на линији четири у алфа1, да би се та линија поклапала у обе датотеке.

  Како инсталирати Скипе на Линук

Следећа промена је означена са 12ц12. Примењујући исту логику, ово нам говори да ред 12 у алфа1 садржи реч Лима, али ред 12 алфа2 садржи реч Линук.

Трећа промена се односи на ред који је избрисан из алфа2. Ознака 21д20 се дешифрује као „ред 21 треба да се обрише из прве датотеке да би се обе датотеке синхронизовале од реда 20 надаље.“ Тхе

Четврта разлика је означена као 26а26,28. Ова промена се односи на три додатне линије које су додате алфа2. Обратите пажњу на 26,28 на етикети. Дворедни бројеви одвојени зарезом представљају опсег бројева редова. У овом примеру, опсег је од реда 26 до реда 28. Ознака се тумачи као „у реду 26 у првој датотеци, додајте редове 26 до 28 из друге датотеке.“ Приказане су нам три линије у алфа2 које треба додати алфа1. Оне садрже речи Куирк, Странге и Цхарм.

Снаппи Оне-Линерс

Ако све што желите да знате је да ли су две датотеке исте, користите опцију -с (пријави идентичне датотеке).

diff -s alpha1 alpha3

Можете користити опцију -к (кратко) да добијете једнако сажету изјаву о томе да су две датотеке различите.

diff -q alpha1 alpha2

Једна ствар на коју треба пазити је да се са две идентичне датотеке опција-к (кратка) потпуно затвара и не пријављује ништа.

Алтернативни поглед

Опција -и (упоредо) користи другачији изглед да опише разлике у датотекама. Често је згодно користити опцију -В (ширина) са бочним погледом, да ограничите број колона које се приказују. Ово избегава ружне линије које отежавају читање резултата. Овде смо рекли дифф-у да производи један поред другог приказ и да ограничи излаз на 70 колона.

diff -y -W 70 alpha1 alpha2

Прва датотека на командној линији, алпха1, приказана је са леве стране, а друга линија на командној линији, алпха2, приказана је на десној страни. Линије из сваке датотеке су приказане једна поред друге. Постоје индикаторски знакови поред оних линија у алфа2 који су промењени, избрисани или додати.

|: Ред који је промењен у другој датотеци.
<: a="" line="" that="" has="" been="" deleted="" from="" the="" second="" file.="">: Линија која је додата другој датотеци која се не налази у првој датотеци.

Ако бисте више волели компактнији упоредни резиме разлика у фајловима, користите опцију –суппресс-цоммон-линес. Ово присиљава дифф да наведе само промењене, додате или избрисане линије.

diff -y -W 70 --suppress-common-lines alpha1 alpha2

Додајте прскање боје

Други услужни програм који се зове цолордифф додаје истицање боја у дифф излаз. Ово знатно олакшава увид у које линије имају разлике.

  Како инсталирати ЈетБраинс ЦЛион на Линук

Користите апт-гет да инсталирате овај пакет на ваш систем ако користите Убунту или другу дистрибуцију засновану на Дебиан-у. У другим дистрибуцијама Линука, користите алатку за управљање пакетима ваше Линук дистрибуције.

sudo apt-get install colordiff

Користите цолордифф исто као што бисте користили дифф.

У ствари, цолордифф је омот за дифф, а дифф обавља сав посао иза кулиса. Због тога ће све опције дифф радити са цолордифф-ом.

Пружање одређеног контекста

Да бисмо пронашли средину између тога да се све линије у датотекама приказују на екрану и да су наведене само промењене линије, можемо затражити од дифф-а да пружи неки контекст. Постоје два начина да се ово уради. Оба начина постижу исту сврху, а то је да се прикажу неке линије пре и после сваке промењене линије. Моћи ћете да видите шта се дешава у фајлу на месту где је разлика откривена.

Први метод користи опцију -ц (копирани контекст).

colordiff -c alpha1 alpha2

Дифф излаз има заглавље. У заглављу су наведена имена две датотеке и њихова времена модификације. Постоје звездице

испред имена прве датотеке и цртице (-) испред имена друге датотеке. Звездице и цртице ће се користити за означавање којој датотеци припадају редови у излазу.

Линија звездица са 1,7 у средини означава да гледамо линије од алфа1. Да будемо прецизни, гледамо редове од један до седам. Реч Делта је означена као промењена. Има узвичник ( ! ) поред себе и црвене је боје. Постоје три реда непромењеног текста приказана пре и после тог реда тако да можемо да видимо контекст те линије у датотеци.

Линија цртица са 1,7 у средини нам говори да сада гледамо линије из алфа2. Опет, гледамо редове од један до седам, где је реч Даве у четвртом реду означена као другачија.

colordiff -C 2 alpha1 alpha2

Три реда контекста изнад и испод сваке промене су подразумевана вредност. Можете одредити колико линија контекста желите да дифф пружи. Да бисте то урадили, користите опцију -Ц (копирани контекст) са великим „Ц“ и наведите број редова који желите:

colordiff -u alpha1 alpha2

Друга опција дифф која нуди контекст је опција -у (обједињени контекст).

Као и раније, имамо заглавље на излазу. Две датотеке су именоване и приказана су њихова времена модификације. Испред назива алфа1 налазе се цртице (-), а испред имена алфа2 знаци плус (+). Ово нам говори да ће се цртице користити за упућивање на алфа1, а знаци плус ће се користити за упућивање на алфа2. По целој листи су разбацане линије које почињу са знаковима (@). Ове линије означавају почетак сваке разлике. Такође нам говоре које се линије приказују из сваке датотеке.

  5 најбољих непроменљивих, чврстих Линук дистрибуција

Приказују нам се три реда пре и после линије означене као различите тако да можемо да видимо контекст промењене линије. У јединственом приказу, линије са разликом су приказане једна изнад друге. Линији од алфа1 претходи цртица, а линији од алфа2 претходи знак плус. Овај приказ постиже у осам редова оно што је копираном контекстуалном приказу изнад требало петнаест да уради.

colordiff -U 2 alpha1 alpha2

Као што бисте очекивали, можемо тражити од дифф-а да обезбеди тачно онолико редова обједињеног контекста који бисмо желели да видимо. Да бисте то урадили, користите опцију -У (јединствени контекст) са великим „У“ и наведите број редова који желите:

Игнорисање размака и великих слова

colordiff -y -W 70 test4 test5

Хајде да анализирамо још два фајла, тест4 и тест5. У њима се налазе имена шест суперхероја.

Резултати показују да дифф не налази ништа другачије са линијама Блацк Видов, Спидер-Ман и Тхор. Уочава промене са линијама Капетана Америке, Ајронмена и Хулка.

Па шта је другачије? Па, у тесту 5 Хулк се пише малим словом „х“, а Капетан Америка има додатни размак између „Капетан“ и „Америка“. ОК, то се јасно види, али шта није у реду са линијом Иронман? Нема видљивих разлика. Ево доброг правила. Ако га не видите, одговор је бели простор. Скоро сигурно има залутали размак или два, или знак табулатора, на крају тог реда.

Ако вам оне нису битне, можете упутити дифф да игнорише одређене врсте разлика у линијама, укључујући:
-и: Занемарите разлике у случају.
-З: Игноришите празан простор.
-б: Занемари промене у количини белог простора.

-в: Занемари све промене белог простора.

colordiff -i -y -W 70 test4 test5

Замолимо дифф да поново провери те две датотеке, али овај пут да занемаримо све разлике у случају.

colordiff -i -Z -y -W 70 test4 test5

Редови са „Тхе Хулк“ и „Тхе Хулк“ сада се сматрају подударањем, а никаква разлика није означена за мала слова „х“. Замолимо дифф да такође игнорише празни размак на крају.

colordiff -i -w -y -W 70 test4 test5

Као што се сумњало, задњи бели размак је морао бити разлика на линији Иронман јер дифф више не означава разлику за ту линију. То оставља Капетана Америке. Замолимо дифф да игнорише велика и мала слова и да игнорише све проблеме са белим простором.

Кажући дифф-у да игнорише разлике које нас не брину, дифф нам говори да се, за наше сврхе, датотеке подударају. Команда дифф има много више опција, али већина њих се односи на производњу машински читљивог излаза. Они се могу прегледати на Линук-уман страница

. Опције које смо користили у горњим примерима омогућиће вам да пронађете све разлике између верзија ваших текстуалних датотека, користећи командну линију и људске очне јабучице.