Linux'ta grep Komutu Nasıl Kullanılır

Yayınlanan: 2022-01-29
Linux PC'de bir terminal istemi.
Fatmawati Achmad Zaenuri/Shutterstock

Linux grep komutu, birden çok dosyadan eşleşen satırları görüntüleyen bir dize ve kalıp eşleştirme yardımcı programıdır. Ayrıca diğer komutlardan alınan çıkışlarla da çalışır. Size nasıl olduğunu gösteriyoruz.

Grep'in Arkasındaki Hikaye

grep komutu, Linux ve Unix çevrelerinde üç nedenden dolayı ünlüdür. İlk olarak, son derece faydalıdır. İkincisi, seçeneklerin zenginliği ezici olabilir. Üçüncüsü, belirli bir ihtiyacı karşılamak için bir gecede yazılmıştır. İlk ikisi patlıyor; üçüncü biraz kapalı.

Ken Thompson, ed editöründen (ee-dee olarak telaffuz edilir) normal ifade arama yeteneklerini çıkarmış ve metin dosyalarında arama yapmak için kendi kullanımı için küçük bir program oluşturmuştu. Bell Laboratuvarları'ndaki bölüm başkanı Doug Mcilroy, Thompson'a yaklaştı ve meslektaşlarından biri olan Lee McMahon'un karşılaştığı sorunu anlattı.

Yeni Başlayanlar İçin 10 Temel Linux Komutu
İLGİLİ Yeni Başlayanlar İçin 10 Temel Linux Komutu

McMahon, metin analizi yoluyla Federalist makalelerin yazarlarını belirlemeye çalışıyordu. Metin dosyalarındaki tümceleri ve dizeleri arayabilecek bir araca ihtiyacı vardı. Thompson o akşam aracını başkaları tarafından kullanılabilecek genel bir yardımcı program yapmak için yaklaşık bir saat harcadı ve adını grep olarak değiştirdi. Adı, "küresel düzenli ifade araması" olarak tercüme edilen g/re/p ed komut dizesinden aldı.

Thompson'ın Brian Kernighan ile grep doğuşu hakkında konuşmasını izleyebilirsiniz.

grep ile Basit Aramalar

Bir dosya içinde bir dize aramak için arama terimini ve dosya adını komut satırına iletin:

bir terminal widnow'da grep dave /etc/password
Reklamcılık

Eşleşen çizgiler görüntülenir. Bu durumda, tek bir satırdır. Eşleşen metin vurgulanır. Bunun nedeni, çoğu dağıtımda grep diğer ad olarak kullanılmasıdır:

 takma ad grep='grep --color=auto'

Eşleşen birden fazla satırın olduğu sonuçlara bakalım. Bir uygulama günlük dosyasında "Ortalama" kelimesini arayacağız. Günlük dosyasında sözcüğün küçük harf olup olmadığını hatırlayamadığımız için -i (büyük/küçük harf yok say) seçeneğini kullanacağız:

 grep -i Ortalama geek-1.log 

Eşleşen her satır, her birinde eşleşen metin vurgulanmış şekilde görüntülenir.

-v (invert match) seçeneğini kullanarak eşleşmeyen satırları görüntüleyebiliriz.

 grep -v Mem geek-1.log 

Bunlar eşleşmeyen çizgiler olduğu için vurgulama yoktur.

Reklamcılık

grep tamamen sessiz olmasını sağlayabiliriz. Sonuç, kabuğa grep bir dönüş değeri olarak iletilir. Sıfır sonucu, dizenin bulunduğu ve bir sonucu , bulunmadığı anlamına gelir. $? özel parametreler:

 grep -q ortalama geek-1.log
 yankı $?
 grep -q nasıl yapılır geek-1.log
 yankı $? 

grep ile Özyinelemeli Aramalar

İç içe dizinler ve alt dizinler arasında arama yapmak için -r (özyinelemeli) seçeneğini kullanın. Komut satırında bir dosya adı sağlamadığınızı, bir yol sağlamanız gerektiğini unutmayın. Burada geçerli dizinde arama yapıyoruz “.” ve herhangi bir alt dizin:

 grep -r -i memfree . 

Çıktı, eşleşen her satırın dizinini ve dosya adını içerir.

-R (recursive dereference) seçeneğini kullanarak grep sembolik bağları takip etmesini sağlayabiliriz. Bu dizinde logs-folder adında sembolik bir bağlantımız var. /home/dave/logs işaret eder.

 ls -l günlükler klasörü 

Son aramamızı -R (recursive dereference) seçeneği ile tekrarlayalım:

 grep -R -i memfree . 

Sembolik bağ takip edilir ve işaret ettiği dizin de grep ile aranır.

Bütün Kelimeleri Aramak

Varsayılan olarak grep , arama hedefi başka bir dizenin içi de dahil olmak üzere bu satırda herhangi bir yerde görünüyorsa bir satırla eşleşir. Bu örneğe bakın. “Ücretsiz” kelimesini arayacağız.

 grep -i ücretsiz geek-1.log 

Reklamcılık

Sonuçlar, içinde "serbest" dizesi olan satırlardır, ancak bunlar ayrı kelimeler değildir. “MemFree” dizisinin bir parçasıdırlar.

grep yalnızca ayrı "kelimeler"le eşleşmeye zorlamak için -w (kelime normal ifade) seçeneğini kullanın.

 grep -w -i ücretsiz geek-1.log
 yankı $? 

Bu sefer sonuç yok çünkü “ücretsiz” arama terimi dosyada ayrı bir kelime olarak görünmüyor.

Birden Fazla Arama Terimi Kullanma

-E (genişletilmiş normal ifade) seçeneği, birden çok kelime aramanıza olanak tanır. ( -E seçeneği, grep öğesinin kullanımdan kaldırılan egrep sürümünün yerini alır.)

Bu komut, "ortalama" ve "memfree" olmak üzere iki arama terimini arar.

 grep -E -w -i "ortalama|memfree" geek-1.log 

Reklamcılık

Arama terimlerinin her biri için eşleşen tüm satırlar görüntülenir.

Ayrıca, tam sözcükler olması gerekmeyen birden çok terimi de arayabilirsiniz, ancak bunlar tam sözcükler de olabilir.

-e (desenler) seçeneği, komut satırında birden çok arama terimi kullanmanıza olanak tanır. Bir arama modeli oluşturmak için normal ifade parantez özelliğini kullanıyoruz. grep "[]" parantezleri içinde yer alan karakterlerden herhangi biriyle eşleşmesini söyler. Bu, grep arama yaparken "kB" veya "KB" ile eşleşeceği anlamına gelir.

Her iki dize de eşleşir ve aslında bazı satırlar her iki dizeyi de içerir.

Doğru Eşleşen Çizgiler

-x (satır normal ifadesi) yalnızca tüm satırın arama terimiyle eşleştiği satırlarla eşleşir. Günlük dosyasında yalnızca bir kez göründüğünü bildiğimiz bir tarih ve saat damgası arayalım:

 grep -x "20-Ocak--06 15:24:35" geek-1.log 

Eşleşen tek satır bulunur ve görüntülenir.

Bunun tersi ise sadece uyuşmayan çizgileri göstermektir. Bu, yapılandırma dosyalarına bakarken faydalı olabilir. Yorumlar harika, ancak bazen aralarındaki gerçek ayarları tespit etmek zor. İşte /etc/sudoers dosyası:

Reklamcılık

Yorum satırlarını şu şekilde etkili bir şekilde filtreleyebiliriz:

 sudo grep -v "#" /etc/sudoers 

Bunu ayrıştırmak çok daha kolay.

Yalnızca Eşleşen Metni Görüntüleme

Eşleşen satırın tamamını, yalnızca eşleşen metni görmek istemediğiniz bir durum olabilir. -o (yalnızca eşleşen) seçeneği tam da bunu yapar.

 grep -o MemFree geek-1.log 

Ekran, eşleşen satırın tamamı yerine yalnızca arama terimiyle eşleşen metni gösterecek şekilde küçültülür.

grep ile sayma

grep sadece metinle ilgili değildir, sayısal bilgiler de sağlayabilir. grep bizim için farklı şekillerde sayabiliriz. Bir dosyada bir arama teriminin kaç kez göründüğünü bilmek istiyorsak, -c (sayım) seçeneğini kullanabiliriz.

 grep -c ortalama geek-1.log 

grep , arama teriminin bu dosyada 240 kez göründüğünü bildirir.

-n (satır numarası) seçeneğini kullanarak grep eşleşen her satır için satır numarasını görüntülemesini sağlayabilirsiniz.

 grep -n Ocak geek-1.log 

Reklamcılık

Eşleşen her satırın satır numarası satırın başında görüntülenir.

Görüntülenen sonuç sayısını azaltmak için -m (maksimum sayı) seçeneğini kullanın. Çıktıyı eşleşen beş satırla sınırlayacağız:

 grep -m5 -n Ocak geek-1.log 

Bağlam Ekleme

Her eşleşen satır için bazı ek satırları (muhtemelen eşleşmeyen satırları) görebilmek genellikle yararlıdır. eşleşen satırlardan hangisinin ilgilendiğinizi ayırt etmenize yardımcı olabilir.

Eşleşen satırdan sonra bazı satırları göstermek için -A (bağlamdan sonra) seçeneğini kullanın. Bu örnekte üç satır istiyoruz:

 grep -A 3 -x "20-Ocak-06 15:24:35" geek-1.log 

Eşleşen satırdan önceki bazı satırları görmek için -B (önceki bağlam) seçeneğini kullanın.

 grep -B 3 -x "20-Ocak-06 15:24:35" geek-1.log 

Eşleşen satırdan önceki ve sonraki satırları dahil etmek için -C (bağlam) seçeneğini kullanın.

 grep -C 3 -x "20-Ocak-06 15:24:35" geek-1.log 

Eşleşen Dosyaları Gösterme

Arama terimini içeren dosyaların adlarını görmek için -l (eşleşen dosyalar) seçeneğini kullanın. Hangi C kaynak kodu dosyalarının sl.h başlık dosyasına referanslar içerdiğini bulmak için şu komutu kullanın:

 grep -l "sl.h" *.c 

Dosya adları eşleşen satırlar değil listelenir.

Reklamcılık

Ve elbette, arama terimini içermeyen dosyaları arayabiliriz. -L (eşleşmeyen dosyalar) seçeneği tam da bunu yapar.

 grep -L "sl.h" *.c 

Satırların Başlangıcı ve Sonu

grep yalnızca satırın başında veya sonunda bulunan eşleşmeleri görüntülemeye zorlayabiliriz. “^” normal ifade operatörü, bir satırın başlangıcıyla eşleşir. Pratik olarak günlük dosyasındaki tüm satırlar boşluk içerecektir, ancak ilk karakterleri boşluk olan satırları arayacağız:

 grep "^" geek-1.log 

İlk karakter olarak - satırın başında - boşluk bulunan satırlar görüntülenir.

Satırın sonunu eşleştirmek için “$” normal ifade operatörünü kullanın. “00” ile biten satırları arayacağız.

 grep "00$" geek-1.log 

Ekran, son karakterleri “00” olan satırları gösterir.

Pipes'ı grep ile kullanma

Elbette, girdiyi grep aktarabilir, grep çıktıyı başka bir programa aktarabilir ve bir boru zincirinin ortasında grep yerleştirebilirsiniz.

Reklamcılık

Diyelim ki C kaynak kodu dosyalarımızda “ExtractParameters” dizesinin tüm oluşumlarını görmek istiyoruz. Oldukça fazla olacağını biliyoruz, bu yüzden çıktıyı less içine aktarıyoruz:

 grep "ExtractParameters" *.c | az 

Çıktı less olarak sunulur.

Bu, dosya listesinde gezinmenize ve less's arama özelliğini kullanmanıza olanak tanır.

Çıktıyı grep wc ve -l (satırlar) seçeneğini kullanırsak, “ExtractParameters” içeren kaynak kod dosyalarındaki satır sayısını sayabiliriz. (Bunu grep -c (count) seçeneğini kullanarak başarabiliriz, ancak bu, grep dışında borulamayı göstermenin düzgün bir yoludur.)

 grep "ExtractParameters" *.c | wc -l 

Bir sonraki komutla, çıktıyı ls grep ve çıktıyı grep sort Geçerli dizindeki dosyaları listeliyoruz, içinde "Aug" dizesi olanları seçip dosya boyutuna göre sıralıyoruz:

 ls -l | grep "Ağustos" | +4n sırala 

Bunu parçalayalım:

  • ls -l : ls kullanarak dosyaların uzun biçimli bir listesini gerçekleştirin.
  • grep “Aug” : ls listesinden içinde “Aug” olan satırları seçin. Bunun, adlarında "Aug" olan dosyaları da bulacağını unutmayın.
  • sort +4n : grep çıktısını dördüncü sütunda (dosya boyutu) sıralar.

Ağustos ayında değiştirilen tüm dosyaların (yıldan bağımsız olarak) artan dosya boyutu sırasına göre sıralanmış bir listesini alırız.

İLGİLİ: Linux'ta Borular Nasıl Kullanılır

grep: Daha Az Komut, Daha Çok Müttefik

grep emrinizde olması için müthiş bir araçtır. 1974'ten kalma ve hala güçlü çünkü yaptığı şeye ihtiyacımız var ve hiçbir şey bunu daha iyi yapamaz.

Bazı düzenli ifadeler-fu ile grep birleştirmek, onu gerçekten bir sonraki seviyeye taşıyor.

İLGİLİ: Daha İyi Arama Yapmak ve Zamandan Tasarruf Etmek için Temel Normal İfadeler Nasıl Kullanılır?

İLGİLİ: Geliştiriciler ve Meraklılar için En İyi Linux Dizüstü Bilgisayarlar