3 Mayıs 2015 Pazar

grep komutu

grep
grep satırlar üzerinde çalışır. satırlar üzerinde çalışmak için awk, sed, cut gibi başka uygulamalar da bulunuyor. grep bu uygulamaların tersine satırı daha küçük alanlara ayırmaz. Sadece satırda belirtilen örüntü var veya yok şeklinde çalışır.

Satırın Ayarlanması
-A (After) seçeneği
Eşleşen satırdan sonra gelen kaç satırın daha gösterileceğini belirtir.
-B (Before) seçeneği
Eşleşen satırdan önce gelen kaç satırın daha gösterileceğini belirtir.
-C seçeneği
Eşleşen satırdan önce ve sonra gelen kaç satırın daha gösterileceğini belirtir.

Çıktının Ayarlanması
-c seçeneği
-c yani count ile kaç tane satır olduğu bulunur. Örnekte içinde read.txt dosyasında null bulunduran kaç satır olduğu görülüyor.
grep -o null file | grep -c null
Sonuç olarak mesela
1
yazar.

-m seçeneği
-m NUM, --max-count=NUM
          Stop  reading  a  file after NUM matching lines.
max-count anlamına gelir. Belirtilen sayı kadar satır bulunduktan sonra grep komutu sonlanır. Böylece çok büyük dosyaları okumak için vakit kaybedilmez. Örnekte xrandr komutunun içindeki ilk brightness kelimesini içeren satır aranıyor.
BRIGHTNESS=`xrandr --verbose | grep -m 1 -i brightness | cut -f2 -d ' '`
-o seçeneği
Tüm satır yerine sadece eşleşen kısmı gösterir. Örnek'te mytext'ten önce ve sonra 3 karakter daha olması isteniyor ve sadece eşleşen metin gösteriliyor.
grep -o '...mytext...' file
Arama Örüntüsünün Atanması
-P seçeneği
Pearl tarzı düzenli ifade kullanabilmeyi sağlar. Örnekte dosyadaki eksi sayıları bulunuyor. 
$ grep -oP '(^|,)\K-\d+' file.csv
Pearl düzenli ifadesi şöyle okunuyor
  • (^|,) matches the start of a line or comma.
  • \K discards the previously matched characters.
  • -\d+ Matches - plus the following one or more numbers.
Bir başka örnekte begin ve end arasındaki blok bulunuyor.
Some text
begin
Some text goes here.
end
Some more text
Basit bir regex ile bulmak için şöyle  yapılır.
grep -Pzo "^begin\$(.|\n)*^end$" file
Eğer begin ve end'i dahil etmek istersek (?<= ile look ahead, (?= ile look behind yapılır.
grep -Pzo "(?<=^begin$\n)(.|\n)*(?=\n^end$)" file

-v seçeneği
Normalde grep verilen örüntüye uyan satırları gösterir, ancak -v ile örüntüye uyan satırların gösterilmemesi sağlanır.

Düzenli İfade Örnekleri
Sonu belli bir karakter ile biten satırları arama
Örnek'te sonu / karakteri ile biten satırlar aranıyor.
$ grep '/$' file

Dosya ve Dizin Seçimi
-r seçeneği
bu seçenekle recursive arama yapılabilir. Bu seçeneğin tek dezavantajı dosya ismine göre süzme yapmaya izin vermemesi. grep'i iki kere kullanarak aşağıdaki çözüm kullanılabilir.
grep -r fred . | grep '^[^:]*\.txt:'

En kolay çözüm find ile dosya ismine göre süzmek ve daha sonra satır aramak. Örnekte *.txt dosyaları içinde fred kelimesi aranıyor.
find . -name '*.txt' | xargs grep fred

Windows'ta find
grep Windows'ta yok ama find komutu kullanılabilir.

/C seçeneği 
Eşleşen satır sayısı sayılır. Örnekte jpg dosyalarının sayısı bulunuyor.
Dir /b /a-d *.jpeg | find /c ".jpeg"



Hiç yorum yok:

Yorum Gönder