Linux Terminalinde İki Metin Dosyasını Karşılaştırma

Fatmawati Achmad Zaenuri/Shutterstock.com

Bir metin dosyasının iki revizyonu arasındaki farkları görmeniz mi gerekiyor? O zaman diff , ihtiyacınız olan komuttur. Bu eğitim, Linux ve macOS'ta diff nasıl kullanılacağını kolay bir şekilde gösterir.

Diff içine dalış

diff komutu iki dosyayı karşılaştırır ve ikisi arasındaki farkların bir listesini oluşturur. Daha doğru olması için, ikinci dosyaya uyması için ilk dosyada yapılması gereken değişikliklerin bir listesini oluşturur. Bunu aklınızda tutarsanız, diff çıktının anlaşılmasını daha kolay bulacaksınız. diff komutu, kaynak kod dosyaları arasındaki farkları bulmak ve patch komutu gibi diğer programlar tarafından okunabilecek ve uygulanabilecek bir çıktı üretmek için tasarlanmıştır. Bu derste, diff kullanmanın en yararlı insan dostu yollarını inceleyeceğiz.

Hemen dalın ve iki dosyayı analiz edelim. Komut satırındaki dosyaların sırası, hangi dosya diff 'ilk dosya' olarak kabul ettiğini ve hangisinin “ikinci dosya” olarak kabul ettiğini belirler. Her iki dosya da fonetik alfabeyi içeriyor, ancak ikinci dosya, alpha2, iki dosyanın aynı olmaması için biraz daha düzenleme yaptı.

Dosyaları bu komutla karşılaştırabiliriz. diff , boşluk, ilk dosyanın adı, boşluk, ikinci dosyanın adını yazın ve ardından Enter tuşuna basın.

diff alpha1 alpha2

Bu çıktıyı nasıl değerlendiriyoruz? Ne aradığınızı öğrendikten sonra o kadar da kötü değil. Her fark sırayla tek bir sütunda listelenir ve her fark etiketlenir. Etiket 4c4 gibi bir harfin her iki tarafını da içerir. İlk sayı, alfa1'deki satır numarası ve ikinci sayı, alfa2'deki satır numarasıdır. Ortadaki harf olabilir:

  • c : İlk dosyadaki satırın ikinci dosyadaki satırla eşleşmesi için değiştirilmesi gerekiyor.
  • d : İlk dosyadaki satır, ikinci dosya ile eşleşecek şekilde silinmelidir.
  • a : İkinci dosyaya uyması için ilk dosyaya ekstra içerik eklenmelidir.

4c4 , 4c4 dördüncü satırına göre değiştirilmesi gerektiğini söylüyor. Bu diff bulunan iki dosya arasındaki ilk fark.

< İle başlayan satırlar, bizim örneğimizde alfa1'deki ilk dosyaya, > ile başlayan satırlar ise ikinci dosya olan alpha2'ye başvurur. < Delta satırı bize Delta kelimesinin alfa1'deki dördüncü satırın içeriği olduğunu söyler. > Dave satırı bize Dave kelimesinin alpha2'deki dördüncü satırın içeriği olduğunu söyler. Özetlemek gerekirse, bu çizgiyi her iki dosyada da eşleştirmek için Delta'yı alfa1'deki dördüncü satırda Dave ile değiştirmeliyiz.

Bir sonraki değişiklik 12c12 ile gösterilir. Aynı mantığı uygulayarak, bu bize alpha1'deki 12 satırının Lima kelimesini içerdiğini ancak alpha2'nin 12 satırının Linux kelimesini içerdiğini gösterir.

Üçüncü değişiklik, alfa2'den silinmiş bir çizgiyi ifade eder. Etiket 21d20 olarak “çizgi her iki dosya itibaren hat 20 senkronize hale getirmek için ilk dosyadan silinecek 21 ihtiyaçlarını.” Deşifre edilir < Uniform hat bize alfa1 silinir gereken hattın içeriğini gösterir.

Dördüncü fark 26a26,28 olarak etiketlenmiştir. Bu değişiklik, alpha2'ye eklenmiş üç ekstra satırı ifade eder. Etiketteki 26,28 not alın. Virgülle ayrılan iki satırlı sayılar, satır sayıları aralığını temsil eder. Bu örnekte, aralık satır 26'dan satır 28'e kadardır. Etiket "ilk dosyada satır 26'da, ikinci dosyadan satır 26 ila 28" olarak yorumlanır. Alfa1'e eklenecek. Bunlar, Quirk, Strange ve Charm kelimelerini içerir.

Snappy Tek Gömlekleri

Tek bilmek istediğiniz, iki dosyanın aynı olup olmadığı ise, -s (aynı dosyaları bildir) seçeneğini kullanın.

diff -s alpha1 alpha3

-q (brief) seçeneğini kullanarak, iki dosyanın farklı olması hakkında eşit derecede kısa bir ifade alabilirsiniz.

diff -q alpha1 alpha2

Dikkat edilmesi gereken bir şey, iki özdeş dosya ile -q (short) seçeneğinin tamamen istila ettiği ve hiçbir şey rapor etmediğidir.

Alternatif Bir Bakış

-y (yan yana) seçeneği, dosya farklılıklarını tanımlamak için farklı bir düzen kullanır. Görüntülenen sütun sayısını sınırlamak için -W (genişlik) seçeneğini yan yana görüntülemek için kullanmak genellikle uygundur. Bu, çıktının okunmasını zorlaştıran çirkin sarma hatlarından kaçınır. Burada, diff yan yana ekran üretmesini ve çıktıyı 70 sütunla sınırlamasını söyledik.

diff -y -W 70 alpha1 alpha2

Komut satırındaki ilk dosya, alfa1, solda ve ikinci satır komut satırındaki alfa2, sağda gösterilir. Her dosyadaki satırlar yan yana görüntülenir. Alfa2'de değiştirilmiş, silinmiş veya eklenmiş satırların yanında gösterge karakterleri vardır.

  • | : İkinci dosyada değiştirilmiş bir satır.
  • < : İkinci dosyadan silinen bir çizgi.
  • > : İlk dosyada bulunmayan ikinci dosyaya eklenen bir satır.

Dosya farklarının yan yana daha küçük bir özetini tercih ederseniz, --suppress-common-lines seçeneğini kullanın. Bu kuvvetler diff , değiştirilemez eklenen veya silinen satırları sadece listelemek için.

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

Renk Sıçrama Ekleme

colordiff adlı başka bir yardımcı program, diff çıktısına vurgu yaparak renk ekler. Bu, hangi çizgilerin farklılık gösterdiğini görmeyi kolaylaştırır.

Ubuntu veya başka bir Debian tabanlı dağıtım kullanıyorsanız, bu paketi sisteminize kurmak için apt-get kullanın. Diğer Linux dağıtımlarında bunun yerine Linux dağıtımınızın paket yönetimi aracını kullanın.

sudo apt-get install colordiff

colordiff tıpkı diff kullandığınız gibi kullanın.

Aslında, colordiff diff için bir sarmalayıcıdır ve diff , sahnelerin arkasındaki tüm işleri yapar. Bu nedenle, tüm diff seçenekleri colordiff ile colordiff .

Bazı Bağlam Sağlamak

Ekranda görüntülenen dosyaların içerisindeki bütün satırlar sahip ve sadece değiştirilen hatlar listelenmiş olan arasında bazı orta yol bulmak için, sorabilir diff içerik sağlamak için. Bunu yapmanın iki yolu var. Her iki yol da aynı amacı gerçekleştirir; bu, her değiştirilen çizgiden önce ve sonra bazı çizgiler göstermektir. Aradaki farkın tespit edildiği yerde dosyada neler olup bittiğini görebileceksiniz.

İlk yöntem -c (kopyalanan bağlam) seçeneğini kullanır.

colordiff -c alpha1 alpha2

diff çıktısının bir başlığı var. Başlık, iki dosya adını ve bunların değişiklik zamanlarını listeler. İlk dosya adından önce yıldız işaretleri ( * ) ve ikinci dosya adından önce kısa çizgiler ( - ) vardır. Çıktıdaki satırların hangi dosyaya ait olduğunu göstermek için yıldız işaretleri ve kısa çizgiler kullanılacaktır.

Ortada 1,7 olan bir yıldız işareti, alfa1'den gelen çizgilere baktığımızı gösterir. Kesin olarak, 1-7 arasındaki hatlara bakıyoruz. Delta kelimesi değiştirildi olarak işaretlendi. Yanında ünlem işareti ( ! ) Var ve kırmızı. Bu satırdan önce ve sonra görüntülenen üç değiştirilmemiş metin satırı vardır, böylece dosyadaki satırın içeriğini görebiliriz.

Ortada 1,7 olan çizgi çizgisi bize şu anda alpha2'den gelen çizgilere baktığımızı söylüyor. Yine, 1-7. Satırlara bakıyoruz, Dave kelimesi 4. satırda farklı olarak işaretlendi.

Her değişikliğin üstündeki ve altındaki üç içerik satırı varsayılan değerdir. diff sağlamak için kaç tane bağlam satırı istediğinizi belirleyebilirsiniz. Bunu yapmak için, "C" harfiyle -C (kopyalanan bağlam) seçeneğini kullanın ve istediğiniz satır sayısını belirtin:

colordiff -C 2 alpha1 alpha2

Bağlam sunan ikinci diff seçeneği -u (birleştirilmiş bağlam) seçeneğidir.

colordiff -u alpha1 alpha2

Daha önce olduğu gibi çıktıda bir başlığımız var. İki dosya adlandırılır ve değişiklik zamanları gösterilir. Alpha1 adından önce kısa çizgiler ( - ) ve alpha2 adından önce de artı işaretleri ( + ) vardır. Bu bize alfa1 atıfta bulunmak için kısa çizgiler kullanılacağını ve artı işaretleri alfa2 atmak için kullanılacağını söyler. Liste boyunca dağınık, ( @ ) işaretlerinde başlayan satırlardır. Bu çizgiler her farkın başlangıcını işaretler. Ayrıca her dosyadan hangi satırların gösterildiğini de söylerler.

Değiştirilen çizginin içeriğini görebilmemiz için farklı olarak işaretlenen çizgiden önceki ve sonraki üç çizgiyi gösteririz. Birleştirilmiş görünümde, fark içeren çizgiler birbirinin üstünde gösterilir. Alfa1'den gelen çizgi bir çizgi ile gelir ve Alfa2'den gelen çizgi bir artı işaretiyle gelir. Bu ekran, sekiz satırda, yukarıda kopyalanan içerik gösteriminin onbeşin yapmasıyla elde edilmesini sağlar.

Beklediğiniz gibi, diff görmek istediğimiz birleştirilmiş bağlam satırlarının tam sayısını sağlamasını isteyebiliriz. Bunu yapmak için, "U" -U (birleştirilmiş bağlam) seçeneğini kullanın ve istediğiniz satır sayısını belirtin:

colordiff -U 2 alpha1 alpha2

Beyaz Boşluğu ve Davayı Yok Saymak

Test4 ve test5 gibi iki dosyayı daha inceleyelim. Bunların içinde altı süper kahraman ismi var.

colordiff -y -W 70 test4 test5

Sonuçlar, diff Kara Dul, Örümcek Adam ve Thor çizgilerinde farklı bir şey bulamadığını göstermektedir. Kaptan Amerika, Ironman ve Hulk hatları ile değişiklikleri işaretliyor.

Peki farklı olan ne? Eh, test5'te Hulk küçük harf "h" ile heceleniyor ve Kaptan Amerika'nın "Kaptan" ve "Amerika" arasında fazladan bir boşluğu var. Gözle görülür bir fark yok. İşte iyi bir kural. Göremiyorsanız cevap beyaz boşluktur. Bu satırın sonunda neredeyse kesinlikle başıboş bir boşluk veya iki veya sekme karakteri var.

Onlar sizin için önemli değilse, sen talimat verebilirsiniz diff çizgi farkı dahil belirli türlerde görmezden:

  • -i : Durumdaki farklılıkları yoksay.
  • -Z : İzleyen beyaz boşluğu yoksay.
  • -b : Beyaz boşluk miktarındaki değişiklikleri yoksay.
  • -w : Tüm beyaz boşluk değişikliklerini yoksay.

Diyelim ki bu iki dosyayı tekrar kontrol etmeyi diyelim, fakat bu kez durumdaki farklılıkları görmezden gelelim.

colordiff -i -y -W 70 test4 test5

“Hulk” ve “hulk” ile çizgiler artık eşleşmiş kabul edilir ve hiçbir fark küçük harf için işaretlenir “h”. Kullanıcısının soralım diff da beyaz boşluk sondaki görmezden.

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

Şüphe edildiği gibi, takip eden beyaz boşluk Ironman çizgisindeki diff olmalıydı çünkü diff artık bu çizgi için bir fark göstermiyor. Bu da Kaptan Amerika’yı terk ediyor. diff davayı yok sayıp tüm beyaz boşluk sorunlarını yoksaymasını isteyelim.

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

Söyleyerek diff biz endişe değiliz farklılıkları görmezden diff amaçlarımız, dosyalar maç için, bize söyler.

diff komutunun daha birçok seçeneği var, ancak bunların çoğu makine tarafından okunabilen çıktı üretmekle ilgilidir. Bunlar Linux adam sayfasında incelenebilir. Yukarıdaki örneklerde kullandığımız seçenekler, komut satırını ve insan gözbebeklerini kullanarak metin dosyalarınızın sürümleri arasındaki tüm farkları izlemenizi sağlar.