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