Grep
- Grep Komutu ve Kullanımı
- Grep Parametreleri
- Dosya / Dizin Listeleme İşlemleri
- Regular Expressions
- Karakter Sınıfları
Grep UNIX'te bir dosya ve içerik arama / listeleme komutudur.
Grep Komutu ve Kullanımı
Grep'in komut yapısını basit olarak şu şekilde özetleyebiliriz:
grep [parametreler] "Aranan İfade" "Dosya ad ve adres(ler)i"
Aynı anda birden fazla parametre ve dosya kullanabiliriz.
Örnek:
dosya1.txt |
dosya2.txt |
Sincan / Ankara Bandırma / Balıkesir Çayeli / Rize |
Suruç / Şanlıurfa Kavaklıdere / Ankara Çankaya / Ankara |
grep -v "Ankara" dosya1.txt dosya2.txt
Bu komut dosya1.txt ve dosya2.txt içerisinde içerisinde "Ankara" ifadesi geçmeyen satırları listeler.
=> dosya1.txt:Bandırma / Balıkesir
=> dosya1.txt:Çayeli / Rize
=> dosya2.txt:Suruç / Şanlıurfa
* Dosyaların örnekteki gibi .txt uzantılı olma zorunluluğu yoktur.
Grep Parametreleri
-v
Komutun işlevini tersine çevirir. Yani belirlenen kriterlere uymayan satır veya dosyaları listelemekte kullanılır.
Örnek:
dosya1 |
İstanbul Erkek Lisesi Sütçü İmam Üniversitesi Dicle Teknik Üniversitesi Cağaloğlu Anadolu Lisesi Konya Selçuklu Üniversitesi |
grep -v "Lise" dosya1
=> Sütçü İmam Üniversitesi
=> Dicle Teknik Üniversitesi
=> Konya Selçuklu Üniversitesi
-c
Belirlenen kriterlere uyan satır veya dosyaları listelemek yerine sadece esayısını gösterir.
Örnek:
dosya1 |
İstanbul Erkek Lisesi Sütçü İmam Üniversitesi Dicle Teknik Üniversitesi Cağaloğlu Anadolu Lisesi Konya Selçuklu Üniversitesi |
grep -c "Lise" dosya1
=> 2
-i
Eşleştirmede büyük/küçük harf duyarlılığını kaldırır. Büyük veya küçük harf gözetmeksizin eşleşme gerçekleşir.
Örnek:
dosya1 |
İstanbul Erkek LiSesi Sütçü İmam Üniversitesi Dicle Teknik Üniversitesi Cağaloğlu Anadolu lisesi Konya Selçuklu Üniversitesi Mersin Atatürk LİSEsi |
grep -i "Lise" dosya1
=> İstanbul Erkek LiSesi
=> Cağaloğlu Anadolu lisesi
=> Mersin Atatürk LISEsi
grep -c -i "Lise" dosya1
=> 3
-w
Sadece kelime olarak bağımsız eşleşmeleri listeler. Böylece "soz" diye arattığımızda "sozcuk", "sozel", "soz3" gibi ifadeler eşleşmez. Sadece "soz" ile eşleşir. Eşleşme gerçekleşebilmesi için kelimenin öncesinde ve sonrasında noktalama işareti veya boşluk dışında bir karakter bulunmaması gerekir.
Örnek:
dosya1 |
12 15 180 123 600 a12 a12 555.12.666 |
grep -w "12" dosya1
=> 12 15 180
=> 555.12.666
-l
Satırlar yerine eşleşen ifadelerin bulunduğu dosyaların isimlerini listeler.
Örnek:
dosya1 |
dosya2 |
dosya3 |
Kırmızı Sarı Mavi Turuncu Yeşil Siyah |
Sarı Eflatun Beyaz Gri Turuncu Kırmızı |
Gri Siyah Yeşil Beyaz Mavi Eflatun |
grep -l "Mavi" dosya1 dosya2 dosya3
=> dosya1
=> dosya3
Örnek:
/home/derya klasöründe içerisinde "Mavi" geçen dosyaları listelemek için;
grep -l "Mavi" /home/derya/*
-r
Verilen dizinin altdizinlerde de arama yapılması için kullanılır.
Örnek:
grep -l -r "calc" /home/derya/projeler
-m [sayı]
Bu parametre ile istenen sayıda sonuca ulaşılınca grep komutu çalıştırmayı keser.
Örnek:
dosya1 |
# Buzdolabı Fırın # Televizyon # Çamaşır Makinesi |
grep -m 2 "#" dosya1
=> # Buzdolabı
=> # Televizyon
-n
Listelemede satır numarasını görebilmek için "-n" parametresini kullanabiliriz.
Örnek:
dosya1 |
# Buzdolabı Fırın # Televizyon # Çamaşır Makinesi |
grep -n "#" dosya1
=> 1:# Buzdolabı
=> 3:# Televizyon
Dosya / Dizin listeleme
Dosya ismine göre aratarak listeleme işlemi "ls" komutu ile gerçekleştirilir.
Örnek:
/home/derya dizini içerisinde isminde "ornek" geçen dosya ve klasörlerimizi listeleyelim.
ls /home/derya/* | grep ornek
* Daha gelişmiş bir arama işlemi için "ls -l" komutu yardımıyla dosyalarımızı örneğin adına, oluşturulduğu tarihe, bulunduğu dizine, boyutuna, yetki türlerine göre aratıp listeleyebiliriz.
Örnek-1:
İsminde "dosya" geçen dosyalarımızı listeleyelim.
ls -l | grep dosya
Örnek-2:
5 Temmuz 2011 Tarihinde oluşturulan dosya ve klasörleri listeleyelim.
ls -l | grep 11-07-05
Regular Expressions
. (Nokta) => Nokta (.) karakteri bütün karakterlerin yerine geçebilir. İlgili yerde bir karakter olması gerektiği anlamına gelir. Örneğin “A.B” ifadesi “ARB” , “ASB” , “A2B” veya “AzB” ve benzeri gibi bütün ifadelere eşittir.
Örnek:
dosya1 |
Buca / İzmir Ezine / Çanakkale Derince / İzmit Sarıkamış / Kars |
grep "İzmi." dosya1
=> Buca / İzmir
=> Derince / İzmit
? => Soru işareti (?) karakteri aynı nokta gibi bütün karakterlerin yerine geçebilir, fakat aranan ifadede değil dosya adı ve adresi kısmında kullanılır. İlgili yerde bir karakter olması gerektiği anlamına gelir. Örneğin “dosya?.txt” ifadesi “dosya1.txt” , “dosyaX.txt” , “dosya!.txt” veya “dosyaa.txt” ve benzeri gibi bütün ifadelere eşittir.
Örnek:
asli.txt |
avrasya.txt |
anka.txt |
kalem kitap |
kitap defter |
silgi kitap |
grep "kitap" a???.txt
=> asli.txt:kitap
=> anka.txt:kitap
[ ] => Köşeli parantezlerin içerisinde yer alan her karakter eşleşme sağlar. [abcd] ifadesi a, b, c ve d harfleriyle eşleşir.
Örnek-1:
dosya1 |
proje_deneme2.txt proje_deneme5.txt proje_deneme8.txt proje_deneme9.txt |
grep "deneme[58].txt" dosya1
=> proje_deneme5.txt
=> proje_deneme8.txt
Örnek-2:
dosyaA |
dosyaB |
dosyaC |
Kırmızı Sarı Mavi Turuncu Yeşil Siyah |
Sarı Eflatun Beyaz Gri Turuncu Kırmızı |
Gri Siyah Yeşil Beyaz Mavi Eflatun |
grep "Mavi" dosya[A-F]
=> dosyaA:Kırmızı Sarı Mavi
=> dosyaB:Beyaz Mavi Eflatun
[^ ] => Köşeli parantezlerin içerisinde yer almayan bütün karakterler eşleşme sağlar. [^abcd] ifadesi a, b, c ve d harfleri dışında bütün karakterler ile eşleşir.
Örnek-1:
dosya1 |
proje_deneme2.txt proje_deneme5.txt proje_deneme8.txt proje_deneme9.txt |
grep "deneme[^58].txt" dosya1
=> proje_deneme2.txt
=> proje_deneme9.txt
Örnek-2:
dosya1 |
dosya2 |
dosya3 |
Kırmızı Sarı Mavi Turuncu Yeşil Siyah |
Sarı Eflatun Beyaz Gri Turuncu Kırmızı |
Gri Siyah Yeşil Beyaz Mavi Eflatun |
grep "Mavi" dosya[^1]
=> Beyaz Mavi Eflatun
^ => Satır başı belirteci. Sadece satır başında yer alan ifadelerde arama yapmayı sağlar.
Örnek:
dosya1 |
4. İstanbul Caz Festivali (12 Şubat 2011) İstanbul Üniversitesi Orkestrası Konseri (25 Mayıs 2011) Uluslararası İstanbul Sinema Haftası (04-11 Haziran 2011) İstanbul Bale Gösterisi (14 Kasım 2011) |
grep "^İstanbul" dosya1
=> İstanbul Üniversitesi Orkestrası Konseri (25 Mayıs 2011)
=> İstanbul Bale Gösterisi (14 Kasım 2011)
$ => Satır sonu belirteci. Sadece satır sonunda yer alan ifadelerde arama yapmayı sağlar.
Örnek:
dosya1 |
23-07-2011 2011-23-07 Temmuz2011 23-07-2011 Tarihi |
grep "2011$" dosya1
=> 23-07-2011
=> Temmuz2011
* => Yıldız (*) karakteri kendisinden önce gelen ifadenin kaç defa geçtiğinin önemli olmadığını gösterir. Yani bir önceki karakter (veya karakter grubu), hiç geçmese de, bir defa geçse de, beş defa geçse de eşleşme gerçekleşir.
Örnek-1:
dosya1 |
ABC ABBBBBC A1C AC |
grep "AB*C" dosya1
(Bu komut "B" harfinin hiç var olmaması durumunda da eşleştirme gerçekleştirecektir. "A" ile "C" arasında sadece "B" karakter(ler)i olan ya da hiç bir karakter olmayan bütün sonuçlar ile eşleşir.)
=> ABC
=> ABBBBBC
=> AC
Örnek-2:
dosya1 |
Malatya Millet Murat Milat |
grep "M.*l.*t" dosya1
(Bu komut sadece içerisinde sırasıyla "M", "l" ve "t" harfleri geçen bütün ifadeler ile eşleşecektir.)
=> Malatya
=> Millet
=> Milat
Yıldız (*) karakteri dosya isminde arama yaparken, içerisinde belirli olmayan karakter dizisi yerine kullanılır. Kendisinden önceki karakterin önemi yoktur. Örneğin ab*d ifadesi ab ile başlayan adının son karakteri d olan metinleri temsil eder. "abd", "ab1111d", "abZd" benzeri bütün ifadeler ile eşleşir; fakat "ad" ile eşleşmez.
Örnek:
dosya1.txt |
dosya.txt |
dokuman.txt |
Kırmızı Sarı Mavi Turuncu Yeşil Siyah |
Sarı Eflatun Beyaz Gri Turuncu Kırmızı |
Gri Siyah Yeşil Beyaz Mavi Eflatun |
grep "Mavi" d*.txt
=> dosya1.txt:Kırmızı Sarı Mavi
=> dokuman.txt:Beyaz Mavi Eflatun
\< => Kelime başı belirteci. Sadece kendisinden önce boşluk veya nokta karakterleri gelen ifadeler ile eşleşme yapmak için kullanılır.
Örnek:
dosya1 |
123kelime 0.kelimeler. kelime1 iki kelime |
grep "\<kelime" dosya1
=> 0.kelimeler
=> kelime1
=> iki kelime
\> => Kelime sonu belirteci. Sadece kendisinden sonra boşluk veya nokta karakterleri gelen ifadeler ile eşleşme yapmak için kullanılır.
Örnek:
dosya1 |
kelime111.a 111 b 111c |
grep "111\>" dosya1
=> kelime111.a
=> 111 b
\( \| \) => \( \| \) operatörünü birden fazla seçenekten herhangi bir veya birkaç tanesinin bulunmasını istediğimiz takdirde kullanabiliriz.
Örnek-1:
dosya1 |
Berna Esengül Mehmet Ersin Kömürcü Ahmet Yıldırım Yasemin Kılıç |
grep "\(Ersin\|Ahmet\)" dosya1
=> Mehmet Ersin Kömürcü
=> Ahmet Yıldırım
Örnek-2:
dosya1 |
Macaristan Basketbol Takımı Amerikan Beyzbol Takımı İtalya Futbol Takımı Yunanistan Voleybol Takımı |
grep "\(Basketbol\|Beyzbol\|Voleybol\)" dosya1
=> Macaristan Basketbol Takımı
=> Amerikan Beyzbol Takımı
=> Yunanistan Voleybol Takımı
\ => Aşağıdaki karakterler grep tarafından kullanılan özel karakterler kapsamına girer. Bu karakterlerin herbirisinin anlamı olduğundan dikkatli kullanılmaları gerekir.
.*[]^$\
Öncesinde ters slash “\” kullanarak özelliklerini etkisiz hale getirebiliriz. Örneğin;
grep "resim\.jpg" dosya1
Bu örnekte dosya1 içerisinde geçen “resim.jpg” ifadesini arıyoruz. "." karakteri özelliğini kaybediyor.
Karakter Sınıfları:
[[:alnum:]] Alfabetik harfler ve rakamları içerir. [a-z A-Z 0-9]
[[:alpha:]] Sadece Alfabetik karakterleri içerir. [a-z A-Z]
[[:blank:]] Boşluk (space ve tab) tuşlarını içerir.
[[:digit:]] Sadece numaraları içerir. [0-9]
[[:lower:]] Küçük harfleri içerir. [a-z]
[[:upper:]] Büyük harfleri içerir.[A-Z]
[[:punct:]] Noktalama işaretlerini içerir.
[[:space:]] Enter, tab, space, NL, CR, FF gibi tuşları içerir.
[[:graph:]] Enter, tab, space dışında görünen karakterleri içerir. [[:^space:]]
[[:print:]] Görünen bütün karakterleri içerir. [.]
[[:xdigit:]] Hexadecimal karakterleri içerir. [0-9 a-f A-F]