egrep: GNU / Linux'ta komut örnekleri

yumurta

grep GNU / Linux komut satırında en çok kullanılan araçlardan biridir. Çok basit bir araç olmasına rağmen çok sayıda işlem yapmanıza olanak sağlar. Önceki bir komutun çıktısında belirli noktaları bulabilmek için özellikle borularla birlikte kullanılır. Ancak, grep'i -E seçeneğiyle çalıştırmaya eşdeğer olan egrep olarak bilinen bir araç da vardır.

E, -E seçeneğini etkinleştiren ve bu seçeneği kullanmadan ön tanımlı olarak egrep'te sahip olduğunuz "Genişletilmiş regex" den gelir. Yani, kullanabilirsiniz genişletilmiş normal ifadeler. Bu eğitimde, normal ifadelerin ne olduğunu, nasıl kullanılabileceğini ve * nix'te hangi türlerin olduğunu açıklamaya girmeyeceğim. Egrep ile yapabileceğiniz bazı yararlı şeylerin pratik örneklerini size göstereceğim ...

grep, egrep ve fgrep benzerdir. Aslında egrep, grep -E'ye ve fgrep, grep -F'ye eşdeğerdir. Yani bizi ilgilendiren durumda kalıpları da düzenli ifadeler olarak yorumlayacaktır.

Sen bir satır veya kelime ara grep ile olduğu gibi bir veya daha fazla dosyada beton. Örneğin, ubuntu kelimesini snap.txt adlı bir dosyada ve ayrıca geçerli dizindeki tüm .txt dosyalarında aramak istediğinizi düşünün:

egrep ubuntu snap.txt

egrep ubuntu *.txt

Arama da olabilir yinelemeli Mevcut dizinin tüm içeriğini aramak için:

egrep -r "hola mundo" *

Şimdiye kadar, büyük ve küçük harf (büyük / küçük harfe duyarlı) dikkate alınarak tam kelimeler veya dizeler arandı, ancak bunu büyük / küçük harfe duyarlı modda yapmak istiyorsanız, ister büyük ister küçük harf olsunlar, aşağıdakileri kullanabilirsiniz (w eklerseniz, yalnızca tam eşleşmeleri bulur):

egrep -i "ejemplo" documento.txt

egrep -iw "ejemplo" documento.txt

Göster, tesadüfleri değil, ama bu eşleşmelerin bulunduğu dosya adları:

egrep -l hola *.txt

Sadece kalıbı veya kelimeyi göster bir belge içinde arandı:

egrep -o printf hola.c

Hayal edebileceğiniz tüm olasılıkları kullanabileceğinizi unutmayın. Daha önce görülen birkaç seçeneği birleştirebilir veya bunları -A n ve -B n gibi diğer seçeneklerle tamamlayabilirsiniz, burada n önce (Önce) ve sonra (Sonra) göstermek istediğiniz satır sayısı eşleşmeyi veya her ikisini aynı anda (C), böylece eşleşmeyi neyin çevrelediğini görebilirsiniz:

egrep -A 2 "printf" hola.c

egrep -B 2 "printf" hola.c

egrep -C 2 printf hola.c

Eşleşme içeren satırları gizleyin ve yalnızca eşleşmeyenleri gösterin:

egrep -v "dos" números.doc

Veya tercih ederseniz, kullanabilirsiniz -e ile birden çok kelime veya eşleşme. Örneğin:

egrep -v -e "uno" -e "dos" -e "tres" números.txt

Ve usa -c yalnızca eşleşme sayısını sayabilirveya uyumsuz satırların sayısını göstermek için -v ile ters çevirin. Örneğin:

egrep -c "include" main.c

egrep -v -c "include" main.c

Ve hatta satır numarasını göster Maçın gerçekleştiği yer ve ayrıca kapladığı pozisyon sırasıyla:

egrep -n "void" hola.c

egrep -o -b "printf" hola.c

Ve ile birlikte düzenli ifadeler yetenekleri genişletilebilir. Örneğin, Merhaba ile başlayan ve güle güle ile biten veya Merhaba ile başlayan ve ardından gelen ve ardından güle güle ile eşleşen bir satır bulun:

* Aşağıdaki komutun düzeltilmesi: Okuyucunun Manuel Alcocer yorumu sayesinde, bir hata olduğu için aşağıdaki komutu değiştirebildim.

egrep '^Hola.*adiós$' ejemplo.txt

egrep "Hola.*adiós" ejemplo.txt

Ancak grep ile farkı merak ediyorsanız, işte size açıklığa kavuşturacak bir örnek ... -E olmadan grep kullanmanız durumunda, Kaçış dizileri böylece özel karakterleri bu şekilde yorumlar, aksi halde deseni dikkate almadan bu şekilde yorumlar. Öte yandan egrep veya grep -E ile bunları hesaba katacaktır. Örneğin:
grep '^no\(fork\|group\)' /etc/group

Bu şuna eşdeğer olacaktır:

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

Yani, nofork veya nogroup ile başlayan eşleşen satırları arar. Ancak grep'in ilk ifadesini kaçış dizileri olmadan kullanırsanız, yaptığı şey arama somut desen hayır (çatal | grup):

grep 'no(fork|group)' /etc/group

Ayrıca arayabilirsin alfanümerik aralıklarveya belirli IP'leri bulmak gibi belirli değerler:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks

Tercih ederseniz, daha spesifik aramalar yapmak için diğer normal ifadeleri kullanabilirsiniz. Örneğin | birini bulmak için tesadüf veya diğeri:

egrep -i '^(printf|scanf)' hola.c

Hatta bulabilirsin büyük harf, küçük harf, yalnızca alfabetik karakterler veya alfanümerik vb., [: alnum:], [: alpha:], [: digit:], [: lower:], [: print:], [: punct:], [: space:], [gibi diğer ifadeleri kullanarak : üst:] vb. Örneğin, büyük harf aramak için:
egrep [[:upper:]] diccioario

Umarım size yardımcı olur ... Yakında düzenli ifadeleri özellikle ona adanmış bir makalede açıklayacağım ...


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Manuel Alkol dijo

    İyi günler.

    Birkaç açıklama ...

    'Egrep' komutunu açıklıyorsunuz ama 'egrep' ve 'grep' arasındaki farkı koymuyorsunuz, ki burada olması gereken budur.

    Örnek:
    Grep ile: ip -4 a | grep '[0-9] \ +'
    Egrep ile: ip -4 a | egrep '[0-9] +'

    Ahh, ve bu yanlış, 'egrep "Merhaba. * Güle güle" example.txt'; Buradaki başarı, dosyada 'Merhaba' dizesini ve ardından her neyse onu ve ardından 'hoşçakal' dizesini içeren bir satır olduğunda ortaya çıkar, satır gerçekten ne olursa olsun başlayıp bitebilir.

    Makalenin söylediği şu:
    egrep '^ Merhaba. * güle güle $' example.txt

    Ve tüm seçenekler ya da hemen hemen hepsi (kontrol etmeyi bırakmıyorum), sadece 'egrep'in değil' grep'in seçenekleridir.

    Saludos cordiales.

    1.    isaac dijo

      Bu hatayı bildirdiğiniz için teşekkürler. Normal ifadeler üzerine yorumladığınız şeyi zaten ikinci paragrafa koydum. Onlara özel bir makale ayıracağım çünkü çok sayıda var ve bu makale çok uzun sürecek. Kutlama!

      1.    Manuel Alkol dijo

        Tekrar merhaba, Isaac.

        İkinci paragrafta, temel olarak "egrep" in "grep -E" nin bir takma adı olduğunu söylediniz veya söylemiş olmalısınız, ancak "egrep" i ne zaman olduğundan farklı şekilde yazılmış bazı normal ifadelerle kullanmaya ilişkin herhangi bir örnek vermiyorsunuz 'grep' tarafından kullanılır.

        Diğer şeylerin yanı sıra, genişletilmiş normal ifadeleri açıklamak için bir makale ayırmak bana cüretkar görünüyor, çünkü bunun gibi reklam yapmayan ve GNU topluluğu için çok önemli bilgilendirme çalışmaları yapan siteler var: https://www.rexegg.com/

        Burada trolling için yazmıyorum, tüm bunlarla birlikte niyetim, birisi bu girişi 'egrep' veya 'grep'in ne yaptığını görmek için okursa, lütfen diğer kaynaklara bakın, bu giriş hiçbir şeye atıfta bulunamaz, çok az şeyi açıklar, kötü bir şekilde, gereksiz bilgiler sunar ve özellikle GNU ve sunduğu güçlü araçlar hakkında bilgisi olmayanlar için kafa karıştırıcı olabilir.

        Son olarak, ilk yorumumdan sonra belirttiğim hatayı (^ $) eklediniz ve düzelttiniz. Diğer sitelerde olduğu gibi, düzeltmeyi yapan kişiye atıfta bulunmanız veya en azından düzeltmenin bir düzeltme olduğunu söylemeniz gerekir, yani GNU tabanının bir parçası, bu blogun başlatıldığı ve kaybolduğu temelin aynısı.

        Bir tebrik.

        1.    isaac dijo

          Bakış açınız için teşekkür ederim.

  2.   fsaflar dijo

    ffff