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?
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
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.
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.
"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.
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).