it-swarm-tr.com

`Grep`,` egrep` ve `fgrep` arasındaki fark nedir?

Herkes bana grep, egrep ve fgrep arasındaki teknik farkları söyleyebilir ve uygun örnekler verebilir mi?

grep üzerinde egrep yerine ne zaman kullanmam gerekir?

287
mr_eclair

Tarihsel olarak bu anahtarlar ayrı ikili dosyalarda sağlanmıştır. Gerçekten eski bazı Unix sistemlerinde ayrı ikili dosyaları çağırmanız gerektiğini göreceksiniz, ancak tüm modern sistemlerde anahtarlar tercih edilir. Grep için man sayfasının ayrıntıları var.

Yaptıklarına gelince, -E Grep'i özel bir moda geçirir, böylece ifade normal örüntü eşleşmesinin aksine bir ERE (Genişletilmiş Düzenli İfade) olarak değerlendirilir. Bu sözdiziminin ayrıntıları kılavuz sayfasındadır.

-E, --extended-regexp
PATTERN'yi genişletilmiş düzenli ifade olarak yorumlama

-F Anahtarı grep'i, eşleşecek bir deseni kabul ettiği farklı bir moda geçirir, ancak bu kalıbı her satırda bir arama dizesine böler ve OR herhangi bir özel desen eşleştirme yapmadan dizeleri.

-F, --fixed-strings
PATTERN'yi, herhangi biri eşlenecek olan yeni satırlarla ayrılmış sabit dizelerin bir listesi olarak yorumlayın.

İşte bazı örnek senaryolar:

  • Düz metinde on adet Unix kullanıcı adı içeren bir dosyanız var. Listelenen on kullanıcıdan herhangi birinin özel gruplarda olup olmadığını görmek için makinenizdeki grup dosyasında arama yapmak istiyorsunuz:

    grep -F -f user_list.txt /etc/group
    

    -F Anahtarının burada yardımcı olmasının nedeni, desen dosyanızdaki kullanıcı adlarının düz metin dizeleri olarak yorumlanmasıdır. Örneğin noktalar, joker karakterler yerine noktalar olarak yorumlanır.

  • Süslü bir ifade kullanarak arama yapmak istiyorsunuz. Örneğin, () Parantez, OR operatör olarak kullanılan | İçeren grupları belirtmek için kullanılabilir. -E Kullanarak bu aramayı çalıştırabilirsiniz:

    grep -E '^no(fork|group)' /etc/group
    

    ... "nofork" veya "nogroup" ile başlayan satırları döndürmek için. -E Anahtarı olmadan, ilgili özel karakterlerden kaçmanız gerekir, çünkü normal kalıp eşleşmesiyle sadece tam kalıp ararlar;

    grep '^no\(fork\|group\)' /etc/group
    
304
Caleb

man grep:

 egrep, grep -E ile aynıdır. 
 fgrep, grep -F ile aynıdır. Egrep veya 
 Fgrep olarak doğrudan çağırma onaylanmamıştır, ancak değiştirilmemiş olarak çalışmasına dayanan tarihsel uygulamalara 
 İzin vermek için sağlanmıştır. 

fgrep veya grep -F Eğer yok açılan dize bir desen olarak yorumlanmasını istiyorsanız.

egrep veya grep -E genişletilmiş normal ifade kullanmanız gerekiyorsa.

33
rozcietrzewiacz

egrep ve fgrep temel olarak grep -E ve grep -F (sırasıyla):

   -E, --extended-regexp
          Interpret PATTERN as an extended regular  expression  (ERE,  see
          below).  (-E is specified by POSIX.)

   -F, --fixed-strings
          Interpret  PATTERN  as  a  list  of  fixed strings, separated by
          newlines, any of which is to be matched.  (-F  is  specified  by
          POSIX.)

Hata mesajları farklı olabilir.

15

"Man grep" den:

üç farklı program egrep, fgrep ve rgrep mevcuttur. egrep, grep -E ile aynıdır. fgrep, grep -F ile aynıdır. rgrep, grep -r ile aynıdır. Egrep veya fgrep olarak doğrudan çağırma onaylanmamıştır, ancak bunlara güvenen geçmiş uygulamaların değiştirilmemiş çalışmasına izin vermek için sağlanmıştır.

8
Rufo El Magufo

Kelimesi kelimesine bir dize ararsanız ve geçtiğiniz dizenin kelimesi kelimesine yorumlandığından emin olmak istiyorsanız (yani, bir nokta veya soru işaretinin başka bir şey olarak yorumlanacağını söylemeden) fgrep veya egrep -F kullanın.

Egrep ve grep arasındaki farka gelince, egrep'in çoğu zaman istediğiniz şey olduğunu düşünüyorum. GNU manuel site sözdiziminde gibi görünen grep ve egrep arasındaki farkları listeler: bazı şeyler eğik çizgi gerektirir, bazıları ise eğik değildir. "uyumlu" Perl regexps ve javascript regexps ile böylece egrep kullanmak benim için daha kolay.

Btw. ack denemenizi gerçekten tavsiye ediyorum - PREG'leri destekliyor ve daha kullanışlı varsayılanlara sahip (yani renklendirme, .svn gibi semboller takip etme gibi muhtemelen istemediğiniz dizinleri atlama, ack yazmak grep -E'den biraz daha kolay).

3
qbolec