Linux'ta grep Komutu Nasıl Kullanılır
Yayınlanan: 2022-01-29
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ı.
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:

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.

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

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

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ı:

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

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.

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.
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 :
lskullanarak dosyaların uzun biçimli bir listesini gerçekleştirin. - grep “Aug” :
lslistesinden 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?
| Linux Komutları | ||
| Dosyalar | tar · pv · kedi · tac · chmod · grep · diff · sed · ar · adam · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · birleştirme · jq · katlama · uniq · dergictl · kuyruk · stat · ls · fstab · yankı · daha az · chgrp · chown · rev · bak · diziler · tür · yeniden adlandır · zip · unzip · mount · umount · yükle · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · yama · dönüştürmek · rclone · parçalamak · srm | |
| süreçler | takma ad · ekran · üst · güzel · renice · ilerleme · strace · systemd · tmux · chsh · geçmiş · at · toplu · ücretsiz · hangi · dmesg · chfn · usermod · ps · chroot · xargs · tty · pembemsi · lsof · vmstat · zaman aşımı · duvar · evet · öldür · uyku · sudo · su · zaman · groupadd · usermod · gruplar · lshw · kapatma · yeniden başlatma · durdurma · güç kapatma · passwd · lscpu · crontab · tarih · bg · fg | |
| ağ | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · kazmak · parmak · nmap · ftp · curl · wget · kim · whoami · w · iptables · ssh-keygen · ufw |
İLGİLİ: Geliştiriciler ve Meraklılar için En İyi Linux Dizüstü Bilgisayarlar

