Grep

Grep ile bir dosya içerisinde arama yapabilirsiniz. Ayrıca aranacak ifadenin aranacak dosyadan önce yazılmış olması gerekir.  Recursive olarak dosyalarda aramak için ise -r (-R, –recursive) parametresi kullanlır.

grep [opsiyon] <aranacak-ifade> <dosya-adi>
grep "gokhan kesici" isimler.txt
grep 232 sayilar.txt
grep 'merhaba' merhabadunya.txt
grep -iR gokhan /etc/

Birden fazla dosyada aramak için dosya adları yanyana verilebilir. Eğer birden fazla dosya içerisinde aranan bulunursa bu durumda gösterim <dosyadi>:<satır> şeklinde olur.

grep [opsiyon] <aranacak-ifade> <dosya-1><dosya-2>
grep "root" /etc/passwd /etc/shadow

Çıktıdan aramak için pipe ( | ) kullanılır. Dosya adını girmeye gerek yoktur. Hatta hatta bir çok kez pipe yapabilir.

çıktı | grep [opsiyon] <aranacak-ifade>
cat adsoyadlar.txt | grep "gokhan kesici" 
cat adsoyadlar | grep gokhan | grep kesici
tail -f /var/log/syslog | grep "dbus"

Bir komutun çıktısını aramak isterseniz aracanak ifade yerine ` ` şeklindeki yatık tırnakların arasında komutu kullanabilirsiniz. Bu işlem komutu çalıştırıp aranacak ifadeymiş gibi sunulur.

grep `whoami` /etc/passwd

Bir ortam değişkeninin değerini de arayabilirsiniz. Önemli bir not ise burada değişkeni çift tırnak içine alabiliyorken tek tırnaklar arasına alırsanız değişken değeri aranamamaktadır.

grep $HOME /etc/passwd
cat /etc/passwd | grep "$HOME"

Eğer aranacak ifade’de özel karakter kullanmak isterseniz -e, -E parametrelerinden birini kullanabilirsiniz. Ya da grep -e yerine egrep kullanabilirsiniz. Özel karakterleri iyi kullanabilmek için de regular expression bilmek gerekecektir.

grep -e "r*" /etc/passwd
egrep "ro.*" /etc/passwd
grep -e "/bin/(ba)?sh" /etc/passwd

Aradığınız ifade ile eşleşmeyecek satırları görmek için -v (–invert-match) parametresini kullanabilirsiniz.

grep -v "/bin/false" /etc/passwd

Bir dosya içeriğindekileri satır satır yine bir dosya içerisinde aramak isterseniz bu durumda -f parametresini kullanabilirsiniz.

grep -f kullanici_listesi.txt /etc/passwd

Varsayılan olarak aranacak konumda ifadenin büyük küçük yazılmış olması arama sonucunu etkiler. Büyük küçük harfe duyarsız olsun isterseniz. -i  (–ignore-case) parametresini kullanabilirsiniz. 

grep -i admin /etc/passwd

Bir dosya içerisinde admin kelimesini aradığınızı düşünün. O dosya içerisinde administrator kelimesi varsa, varsayılan aramada administrator ‘de sonuç olarak döndürülür. Eğer kelime sınırları admin olan ifadeyi sonuç olarak dönsün istiyorsanız, bu durumda -w (–word-regexp) parametresini kullanabilirsiniz.

grep -w admin /etc/passwd

-w parametresiyle sözcük bazında sınırlar çizilmişti. Eğer satır sınırları çizmek isterseniz -x (–line-regexp) parametresini kullanabilirsiniz. Yani satırın tamamı bu aradığım ifade olsun diyorsanız kullanabilirsiniz.

grep -x "ntp:x:109:112::/home/ntp:/bin/false" /etc/passwd

Eşleşilen satır sayısını görmek için -c (–count) parametresini kullanabilirsiniz. Eğer birden fazla dosya girilmişse her dosya için kaç adet bulduğunu <dosya-adi>:<sayısı> şeklinde gösterir.

grep admin /etc/passwd /etc/shadow -c

Eşleşilen dosyaların sadece adını görüntülemek için -l (–files-with-matches) parametresini kullanabilirsiniz. Eşleşmeyen dosyaların adını görüntülemek için ise -L (–files-without-match) parametresini kullanabilirsiniz. Hem eşleşenleri hemde dosya adını getir demek için de -H (–with-filename), dosya adını hiç bir şekilde getirmesin istiyorsanız -h (–no-filename) , satır numarasını da göstersin istiyorsanız -n (–line-number) parametrelerini kullanabilirsiniz.

grep root /etc/passwd /etc/shadow -l
grep root /etc/passwd /etc/shadow /etc/profile -L
grep root /etc/passwd -h
grep root /etc/passwd -H -n

Dosya bazında maksimum değer girerek aramalarda şu kadar bulduktan sonra aramayı sonlandır ve bana dosyalardaki satırları döndür diyebiliyorsunuz. Bunun için -m (–max-count=) parametresini kullanabilirsiniz.

grep root /etc/passwd /etc/shadow -m 1

Arama sonuçlarında satır bulunan ifade satır şeklinde gösterilir. Ancak siz sadece eşleşilen değeri görmek isterseniz bu durumda -o (–only-matching) parametresini kullanabilirsiniz.

grep root /etc/passwd /etc/shadow -o

grep -E ile veya egrep ile iki veya daha fazla aranacak kelime girmek için | operatörü size yardımcı olacaktır.

egrep root|admin /etc/passwd /etc/shadow
grep -E root|admin /etc/passwd

Arama sonuçlarında hata mesajlarını görmemek için -s (-no-messages) parametresini kullanabilirsiniz.

find /etc/ -print | xargs grep admin --no-messages

Grep ile bir ifade aradınız ve bulunan satırın üstünde/altındaki satırları da arama sonucuna dahil etmek istiyor olabilirsiniz. Üstündekileri -B, altındaki satırları -A ifadesiyle bulabilirsiniz.

çıktı | grep gokhan -A 2
çıktı | grep kesici -B 3