Linux'ta Grep, Egrep ve Fgrep Arasındaki Fark Nedir?


Unix benzeri sistemlerde, ister bir dosya, isterse bir satır veya dosyadaki birden fazla satır olsun herhangi bir şeyi aramak için kullanılabilecek ünlü arama araçlarından biri grep yardımcı programıdır. Desteklediği çok sayıda seçeneğe atfedilebilecek işlevsellik açısından çok geniştir: dize deseni kullanarak arama veya reg-ex deseni veya Perl tabanlı reg-ex vb.

Farklı işlevleri nedeniyle grep, egrep (Genişletilmiş GREP), fgrep (fgrep) gibi birçok çeşidi vardır. >Sabit GREP), pgrep (İşlem GREP), rgrep (Yinelemeli GREP) vb. Ancak bu değişkenlerin orijinal grep'ten küçük farklılıkları vardır, bu da onları popüler hale getirir ve çeşitli Linux programcıları tarafından belirli görevler için kullanılır.

Araştırılması gereken asıl şey, üç ana değişken arasındaki farkların neler olduğudur; yani 'grep', 'egrep' ve 'fgrep' Linux kullanıcılarının ihtiyaca göre bir veya diğer sürümü seçmesini sağlayan grep.

grep'in Bazı Özel Meta Karakterleri

  1. + – Önceki karakterin bir veya daha fazla oluşumuna eşdeğerdir.
  2. ? – Bu, önceki karakterin neredeyse 1 tekrarını belirtir. Mesela: a? 'a' veya 'aa' ile eşleşir.
  3. ( – Alternatif ifadenin başlangıcı.
  4. ) – Alternatif ifadenin sonu.
  5. |'|' ile ayrılmış ifadelerden herhangi biriyle eşleşir. Mesela: “(a|b)cde ”, 'abcde' veya 'bbcde' ile eşleşir.
  6. { – Bu meta karakter aralık belirticisinin başlangıcını belirtir. Mesela: “a{2} ”, dosyadaki “aa ” ile eşleşir, yani a 2 kez.
  7. – Bu meta karakter aralık belirticisinin sonunu belirtir.

Grep, egrep ve fgrep Arasındaki Farklar

grep, egrep ve fgrep arasındaki bazı temel farklar aşağıdaki gibi vurgulanabilir. Bu örnek kümesi için, üzerinde işlemin gerçekleştirildiği dosyanın şöyle olduğunu varsayıyoruz:

Grep Komutanlığı

grep veya Global Normal İfade Yazdırma, Unix benzeri sistemlerde herhangi bir dosya veya dosya listesindeki her tür dizeyi arayabilen ve hatta herhangi bir çıktının çıktısını arayabilen ana arama programıdır. emretmek.

Önerilen Okuma: Linux grep Komutuna İlişkin 12 Pratik Örnek

Arama modeli olarak normal dizelerin dışında Temel Normal İfadeleri kullanır. Temel Normal İfadelerde (BRE), meta karakterler şöyledir: '{','}','(',')','|','+','?' anlamlarını kaybederler ve dizenin normal karakterleri olarak ele alınırlar ve özel karakterler olarak ele alınacaklarsa kaçış yapılması gerekir .

Önerilen Okuma: Karakter Sınıfları ve Parantez İfadeleri Üzerine 11 İleri Seviye 'Grep' Komutu

Ayrıca grep, herhangi bir dize veya normal ifadeyi hızlı bir şekilde aramak için Boyer-Moore algoritmasını kullanır.

grep -C 0 '(f|g)ile' check_file
grep -C 0 '\(f\|g\)ile' check_file

Burada olduğu gibi, komut '(' ')' ve '|' kodlarından kaçmadan çalıştırıldığında dizenin tamamını arar, yani “(f|g )ile ” dosyasında. Ancak özel karakterler atlandığında, onları dizenin parçası olarak ele almak yerine, grep bunları meta karakterler olarak değerlendirdi ve “file ” veya “gile ” sözcüklerini aradı. dosyanın içinde.

Egrep Komutanlığı

Egrep veya grep -E, grep veya Genişletilmiş grep'in başka bir sürümüdür. Grep'in bu sürümü, meta karakterleri olduğu gibi ele aldığından ve onları grep'te olduğu gibi dizeler olarak değiştirmediğinden, düzenli bir ifade modeli arama söz konusu olduğunda verimli ve hızlıdır ve dolayısıyla onlardan kaçma yükünden kurtulursunuz. grep'te. ERE veya Genişletilmiş Normal İfade kümesini kullanır.

Egrep durumunda, meta-karakterlerden kaçmasanız bile, onları bir dizenin parçası olarak ele almak yerine özel karakterler olarak ele alır ve özel anlamlarının yerine koyar.

egrep -C 0 '(f|g)ile' check_file
egrep -C 0 '\(f\|g\)ile' check_file

Burada olduğu gibi egrep, bu karakterlerin anlamından anlaşılacağı üzere meta karakterler kaçış yapılmadığında “file ” dizesini aradı. Ancak, bu karakterlerden kaçış yapıldığında, egrep bunları dizenin parçası olarak ele aldı ve dosyada “(f|g)ile ” dizesinin tamamını aradı.

fgrep Komutu

Fgrep veya Sabit grep veya grep -F, dizenin tamamını aramaya gelince aramada hızlı olan grep'in başka bir sürümüdür normal ifadeleri veya herhangi bir meta karakteri tanımadığı için normal ifade yerine. Herhangi bir doğrudan dizeyi aramak için bu, seçilmesi gereken grep sürümüdür.

Fgrep, dizenin tamamını arar ve kaçışlı veya kaçışsız olsa bile normal ifadenin parçası olarak özel karakterleri bile tanımaz.

fgrep -C 0 '(f|g)ile' check_file
fgrep -C 0 '\(f\|g\)ile' check_file

Mesela, meta-karakterlerden kaçış yapılmadığında, fgrep dosyadaki “(f|g)ile ” dizesinin tamamını aradı ve meta-karakterlerden kaçış yapıldığında fgrep komutu şunu aradı: “\(f\|g\)ile ” tüm karakterler dosyada olduğu gibi.

Linux'ta grep komutundan daha fazla yararlanmak istiyorsanız, grep komutunun bazı pratik örneklerini zaten ele aldık, bunları buradan okuyabilirsiniz.

Linux grep Komutunun 12 Pratik Örneği Öğrenin

Çözüm

Yukarıda 'grep', 'egrep' ve 'fgrep' arasındaki farklar vurgulanmıştır. Kullanılan düzenli ifadeler kümesindeki ve yürütme hızındaki farklılık dışında, geri kalan komut satırı parametreleri grep'in üç sürümü için de aynı kalır ve hatta "egrep" veya "fgrep", "grep -E" veya "grep -" yerine aynı kalır. F” kullanılması tavsiye edilir.

Grep'in bu üç sürümü arasında başka farklılıklar bulursanız yorumlarınızda bunları belirtin.