logo

Hur man jämför filer rad för rad i Linux | diff Kommando

I en värld av Linux är hantering och jämförelse av filer en vanlig uppgift för både systemadministratörer och utvecklare. Möjligheten att jämföra filer rad för rad är avgörande för att identifiera skillnader, felsöka kod och säkerställa dataintegriteten. Ett kraftfullt verktyg som underlättar denna process ärdiff>kommando. I den här artikeln kommer vi att utforska hur man använderdiff>kommando för att jämföra filer rad för rad i Linux.

Innehållsförteckning



Förstå skillnaden Kommando

diff står för skillnad .Dediff>command är ett mångsidigt verktyg som är förinstallerat på de flesta Linux-distributioner. Dess primära syfte är att jämföra innehållet i två filer och visa skillnaderna mellan dem. Kommandot ger ett omfattande sätt att markera ändringar, tillägg och raderingar i ett tydligt och läsbart format.

Detta kommando används för att visa skillnaderna i filerna genom att jämföra filerna rad för rad. Till skillnad från sina kolleger, cmp och komm , talar om för oss vilka rader i en fil som ska ändras för att göra de två filerna identiska.

Det viktiga att komma ihåg är det diff använder vissa speciella symboler och instruktioner som krävs för att göra två filer identiska. Den ger dig instruktioner om hur du ändrar den första filen så att den matchar den andra filen.



Grundläggande syntax för diff-kommando

Den grundläggande syntaxen fördiff>kommandot är som följer:

diff [OPTION]... FILE1 FILE2>

Här, ` FILE1`> och ` FILE2`> är de två filerna du vill jämföra.

Den ` OPTION`> flaggan låter dig anpassa beteendet för ` diff`> kommando.



int till sträng

Alternativ Tillgängliga i diff Command

Alternativ

Beskrivning

-c>eller--context>

Utdataskillnader i kontextläge

-u>eller--unified>

Utdataskillnader i enhetligt läge (mer koncis)

-i>eller--ignore-case>

Gör en skiftlägesokänslig jämförelse

–ignorera-allt-utrymme

Ignorera blanksteg när du jämför linjer

-kort

Utdata endast om filerna skiljer sig, inga detaljer

-rekursiv

Jämför kataloger rekursivt

-y>eller--side-by-side>

inurl:.git/head

Visa utdata i ett format sida vid sida

Praktisk implementering av hur man jämför filer rad för rad i Linux? :

Jämför två filer

Jämför filer rad för rad i Linux.

Låt oss säga att vi har två filer med namn a.txt och b.txt som innehåller 5 indiska stater.

cat a.txt cat b.txt>
visa innehåll i filer med hjälp av cat-kommandot

visa innehåll i filer med hjälp av cat-kommandot

När vi nu tillämpar diff-kommandot utan något alternativ får vi följande utdata:

diff a.txt b.txt>
jämföra fil rad för rad i linux

jämföra fil rad för rad i linux

Låt oss ta en titt på vad denna utdata betyder. Den första raden i diff output kommer att innehålla:

  • Radnummer som motsvarar den första filen,
  • En speciell symbol och
  • Radnummer som motsvarar den andra filen.

Som i vårt fall, 0a1 som betyder efter rader 0 (i början av filen) måste du lägga till Tamil Nadu för att matcha den andra filen rad nummer 1. Den berättar sedan vad dessa rader är i varje fil föregås av symbolen:

  • Rader som föregås av a < är rader från den första filen.
  • Rader som föregås av > är rader från den andra filen.
  • Nästa rad innehåller 2,3c3 vilket innebär att från rad 2 till rad 3 i den första filen måste ändras för att matcha rad nummer 3 i den andra filen. Den berättar sedan för oss de raderna med ovanstående symboler.
  • De tre strecken (—) Separera bara raderna i fil 1 och fil 2.

Som en sammanfattning för att göra båda filerna identiska, lägg först till Tamil Nadu i den första filen alldeles i början för att matcha rad 1 i andra filen efter det ändra rad 2 och 3 i första filen, dvs. Uttar Pradesh och Kolkata med rad 3 i andra filen, dvs. Andhra Pradesh . Efter det ändra rad 5 i första filen, dvs. Jammu och Kashmir med rad 5 i andra filen, dvs. Uttar Pradesh .

Ta bort en rad i filer med diff-kommandot

Tänk på scenariot därdiff>indikerar behovet av att radera en rad. Med tanke på två filer,a.txt>ochb.txt>:

visa innehåll i filer med hjälp av cat-kommandot

visa innehåll i filer med hjälp av cat-kommandot

diff a.txt b.txt>
Ta bort en rad i fil

Ta bort en rad i fil

Här ovan utgång 3d2 betyder radera rad 3 i första filen dvs. Telangana så att båda filerna synkronisera upp på rad 2.

Visa skillnader i kontextläge

För att se skillnader i kontextläge, använd -c alternativ. Låt oss försöka förstå detta med exempel, vi har två filer fil1.txt och fil2.txt :

visa innehåll i filer med hjälp av cat-kommandot

visa innehåll i filer med hjälp av cat-kommandot

diff -c file1.txt file2.txt>
Visa skillnad i kontextläge

Visa skillnad i kontextläge

I utgången ovan:

  • Den första filen betecknas med ` ***`> , och den andra filen betecknas med ` ---`> .
  • Linjen med ` ***************`> fungerar som en separator.
  • De två första raderna ger information om fil 1 och fil 2, som visar filnamn, ändringsdatum och ändringstid.
  • Efter det, tre asterisker ` ***`> följs av ett radintervall från den första filen (raderna 1 till 4). Fyra asterisker ` ****`> kom härnäst. Innehållet i den första filen visas sedan med specifika indikatorer:
    • Om en rad är oförändrad föregås den av två blanksteg.
    • Om en rad behöver ändras föregås den av en symbol och ett mellanslag. Symbolerna indikerar:
      • `+`> : En rad i den andra filen som ska läggas till den första filen för identiska resultat.
      • `-`> : En rad i den första filen som ska raderas för identiska resultat.
  • Tre streck ` ---`> följs av ett radintervall från den andra filen (raderna 1 till 4), avgränsade med kommatecken. Fyra streck ` ----`> följ och innehållet i den andra filen visas.

Visa skillnader i enhetligt läge

För att se skillnader i enhetligt läge, använd -i alternativ. Det liknar kontextläget men det visar ingen redundant information eller så visar den informationen i kortfattad form.

visa innehåll i filer med hjälp av cat-kommandot

visa innehåll i filer med hjälp av cat-kommandot

diff -u file1.txt file2.txt>
Visningsskillnad i Unified-läge

Visningsskillnad i Unified-läge

I utgången ovan:

  • Den första filen indikeras med ` ---`> , och den andra filen indikeras med ` +++`> .
  • De två första raderna ger information om fil 1 och fil 2, inklusive ändringsdatum och tid.
  • Efter det, ` @@ -1> `,`> 4 +1`> ,`> 4 @@`> anger linjeintervallet för båda filerna. I det här fallet representerar den raderna 1 till 4 i båda filerna.
  • De efterföljande raderna representerar innehållet i filerna med specifika indikatorer:
    • Oförändrade rader visas utan prefix.
    • Rader i den första filen som ska raderas har prefix->.
    • Rader i den andra filen som ska läggas till har prefix+>.

I det här exemplet indikerar utdata att för att göra båda filerna identiska måste raderna som innehåller mv och comm tas bort från den första filen (file1.txt>), och raderna som innehåller diff och comm måste läggas till.

Skiftlägesokänslig jämförelse mellan filer

Som standard, ` diff`> är skiftlägeskänslig. För att göra en skiftlägesokänslig jämförelse, använd ` -i`> alternativ:

visa innehåll i filer med hjälp av cat-kommandot

visa innehåll i filer med hjälp av cat-kommandot

Dediff>kommandot används sedan för att jämföra dessa filer med-i>alternativet, vilket gör jämförelsen skiftlägesokänslig.

diff -i file1.txt file2.txt>
skiftlägesokänslig Jämföra

skiftlägesokänslig Jämföra

  • 2d1>: Detta indikerar en ändring på rad 2 i den första filen (file1.txt>). Ded>står för delete, och det står att radera rad 2 från den första filen.
    • >: Denna rad anger innehållet i raden som ska raderas. I det här fallet är det mv.
  • 3a3>: Detta indikerar ett tillägg på rad 3 i den första filen (file1.txt>). Dea>står för add, och det står att lägga till en linje vid position 3.
    • >diff>: Den här raden representerar innehållet som ska läggas till. I det här fallet är det diff.

Sammanfattningsvis berättar utdata för oss att för att göra båda filerna identiska (ignorera skiftläge), måste vi ta bort raden som innehåller mv från den första filen (file1.txt>) och lägg till linjediff på samma position. Dediff>kommando, med-i>alternativet, möjliggör en skiftlägesokänslig jämförelse, vilket gör att den betraktar mv och MV som samma under analysen.

Visardiff>Version

För att kontrollera versionen av ` diff`> installerat på ditt system, använd ` --version`> alternativ:

diff --version>
Visar version av diff-kommandot

Visar version av diff-kommandot

Det här kommandot ger information om version, licensiering och författare till ` diff`> verktyg.

Vanliga frågor om diff Command – FAQs

Hur använder jagdiff>kommando för att jämföra två filer rad för rad i Linux?

För att jämföra två filer rad för rad med hjälp avdiff>kommandot, använd helt enkelt följande syntax:

diff file1.txt file2.txt>

Det här kommandot visar skillnaderna mellan de två filerna och markerar tillägg, raderingar och ändringar.

Kan jag ignorera skillnader i blanksteg när jag jämför filer meddiff>kommando?

Ja dendiff>kommandot ger-w>eller--ignore-all-space>alternativet för att ignorera skillnader mellan blanksteg. Till exempel:

sträng ersätt all java
diff -w file1.txt file2.txt>

Detta är särskilt användbart när man jämför kodfiler där ändringar i indrag eller avstånd inte är signifikanta.

Hur kan jag skapa en patchfil med hjälp avdiff>kommando?

För att skapa en korrigeringsfil som representerar skillnaderna mellan två filer, använd-u>alternativet och omdirigera utdata till en fil:

diff -u file1.txt file2.txt>mypatch.patch>

Den genererade patchfilen kan användas senare för att synkronisera en annan fil med ändringarna.

Vad är det enhetliga formatet idiff>output, och hur skiljer det sig från kontextformatet?

Det enhetliga formatet (` -u`> alternativ) i ` diff`> output ger en mer kortfattad och läsbar representation av skillnader jämfört med kontextformatet (` -c`> alternativ). Den visar ändringar i en mer kompakt form, vilket gör det lättare att förstå ändringar mellan filer.

Hur jämför jag rekursivt två kataloger i Linux med hjälp avdiff>kommando?

För att rekursivt jämföra två kataloger och deras innehåll, använd ` -r`> eller ` --recursive`> alternativet meddiff>kommando:

diff -r directory1/ directory2/>

Detta kommando jämför alla filer i de angivna katalogerna och ger detaljerad information om skillnaderna.

Slutsats

I Linux-världen är det en vanlig uppgift för systemadministratörer och utvecklare att jämföra filer. Den ` diff> kommando är ett praktiskt verktyg som hjälper till i denna process. Den här artikeln utforskar hur du använder ` diff`> för att jämföra filer rad för rad i Linux. Den täcker den grundläggande syntaxen, viktiga alternativ som kontextläge och enhetligt läge, och praktiska applikationer som att skapa patchfiler och rekursivt jämföra kataloger. Oavsett om du felsöker kod eller säkerställer filintegritet, förstår och behärskar diff`> kommandot är viktigt för effektiv filhantering i Linux.