Normal İfadelerle grep (ve egrep) kullanma

Using Grep With Regular Expressions



Bu eğitici, her ikisinin de nasıl kullanılacağını açıklar kavramak (ve egrep) t o Dosyalardaki metni basit formlarında ve normal ifadelerle birleştirildiğinde bulun. Birkaç içerir örnekler ve egzersizler , daha fazla çözümler , izleyicinin tamamlaması için.

İsim kavramak ed (ve vim) komutu g/re/p'den gelir; bu, genel olarak belirli bir düzenli ifadeyi aramak ve çıktıyı yazdırmak (görüntülemek) anlamına gelir.







Düzenli İfade

Yardımcı programlar, kullanıcının normal bir ifadeyle eşleşen satırlar için metin dosyaları aramasına izin verir ( normal ifade ). Normal ifade, metinden ve bir veya daha fazla 11 özel karakterden oluşan bir arama dizesidir. Basit bir örnek, bir satırın başlangıcını eşleştirmektir.



Örnek Dosya

temel formu kavramak belirli bir dosya veya dosyalar içindeki basit metni bulmak için kullanılabilir. Örnekleri denemek için önce örnek dosyayı oluşturun.



Aşağıdaki metni bir dosyaya kopyalamak için nano veya vim gibi bir düzenleyici kullanın. dosyam .





xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
xz
x*z
xz
x z
XYZ
XYYZ
xYz
xyz
xyyz
xyyyz

Metindeki örnekleri kopyalayıp yapıştırabilmenize rağmen (çift tırnakların düzgün kopyalanmayabileceğini unutmayın), bunları doğru bir şekilde öğrenmek için komutların yazılması gerekir.

Örnekleri denemeden önce örnek dosyayı inceleyin:



$kedidosyam

Basit Arama

Dosya içindeki 'xyz' metnini bulmak için aşağıdakileri çalıştırın:

$kavramakxyz dosyam

Renkleri Kullanma

Renkleri görüntülemek için –color (çift tire) kullanın veya sadece bir takma ad oluşturun. Örneğin:

$kavramak --renkxyz dosyam

veya

$takma ad kavramak= 'kavramak--renk'
$kavramakxyz dosyam

Seçenekler

İle kullanılan ortak seçenekler kavramak komut şunları içerir:

  • -tüm satırları buluyorum ne olursa olsun davanın
  • -C saymak metni içeren kaç satır
  • -n ekran satırı sayılar eşleşen satırların
  • -l sadece göster dosya isimler o maç
  • -r özyinelemeli alt dizin arama
  • -v tüm satırları bul OLUMSUZ metni içeren

Örneğin:

$kavramak -benxyz dosyam# büyük/küçük harf fark etmeksizin metni bul

$kavramak -icxyz dosyam# metin içeren satırları say

$kavramak -içindexyz dosyam# satır numaralarını göster

Birden Çok Dosya Oluştur

Birden fazla dosya aramayı denemeden önce, birkaç yeni dosya oluşturun:

$dışarı attıxyz>dosyam1
$dışarı attı -Vexyz xzz XYZ>dosyam2
$dışarı attı -Vexxx yyy>dosyam3
$kedidosyam1
$kedidosyam2
$kedidosyam3

Birden Fazla Dosya Ara

Dosya adları veya joker karakter kullanarak birden çok dosyayı aramak için şunu girin:

$kavramak -icxyz dosyam dosyam1 dosyam2 dosyam3
$kavramak -içindexyz benim*
# 'benim' ile başlayan dosya adlarını eşleştir

Egzersiz I

  1. Önce /etc/passwd dosyasında kaç satır olduğunu sayın.
İpucu: kullanıntuvalet -NS /vesaire/şifre
  1. Şimdi metnin tüm oluşumlarını bulun nerede /etc/passwd dosyasında .
  2. Dosyadaki kaç satırın metni içerdiğini bulun
  3. Metni İÇERMEYEN kaç satırı bulun nerede .
  4. Girişiniz için girişi şurada bulun: /etc/passwd

Egzersiz çözümleri bu makalenin sonunda bulunabilir.

Normal İfadeleri Kullanma

Komuta kavramak aramayı daraltmak için on bir özel karakterden veya sembolden bir veya daha fazlasını kullanarak normal ifadelerle de kullanılabilir. Normal ifade, aşağıdakiler gibi yardımcı programlarda kalıp eşleştirmeye izin vermek için özel karakterler içeren bir karakter dizesidir. kavramak , geldim ve sed . Dizelerin tırnak içine alınması gerekebileceğini unutmayın.

Mevcut özel karakterler şunları içerir:

^ Bir satırın başlangıcı
$ Bir satırın sonu
. Herhangi bir karakter ( yeni satır hariç)
* 0 veya daha fazla önceki ifade
Bir sembolün önüne geçmek onu gerçek bir karakter yapar

Hiçbiri dahil olmak üzere herhangi bir sayıdaki karakteri eşleştirmek için komut satırında kullanılabilen * karakterinin Olumsuz burada da aynı şekilde kullanılmıştır.

Ayrıca aşağıdaki örneklerde tırnak kullanımına dikkat edin.

Örnekler

^ karakterini kullanarak metinle başlayan tüm satırları bulmak için:

$kavramak'^xyz' dosyam

$ karakterini kullanarak metinle biten tüm satırları bulmak için:

$kavramak'xyz$' dosyam

Hem ^ hem de $ karakterlerini kullanan bir dize içeren satırları bulmak için:

$kavramak'^xyz$' dosyam

kullanarak satırları bulmak için . herhangi bir karakterle eşleşmek için:

$kavramak'^x.z' dosyam

Önceki ifadenin 0 veya daha fazlasıyla eşleşmesi için * kullanarak satırları bulmak için:

$kavramak'^xy*z 'dosyam

Herhangi bir karakterin 0 veya daha fazlasını eşleştirmek için .* kullanan satırları bulmak için:

$kavramak'^ X.*z 'dosyam

kullanarak satırları bulmak için * karakterinden kaçmak için:

$kavramak'^ X *z 'dosyam

karakterini bulmak için şunu kullanın:

$kavramak'\' dosyam

İfade grep – egrep

NS kavramak komutu, mevcut normal ifadelerin yalnızca bir alt kümesini destekler. Ancak, komut yumurta:

  • tüm normal ifadelerin tam kullanımına izin verir
  • aynı anda birden fazla ifade arayabilir

İfadelerin bir çift tırnak içine alınması gerektiğini unutmayın.

Renkleri kullanmak için –color kullanın veya tekrar bir takma ad oluşturun:

$takma ad yumurta='egrep --renk'

Birden fazla arama yapmak için normal ifade NS yumurta komut birden fazla satıra yazılabilir. Ancak bu, şu özel karakterler kullanılarak da yapılabilir:

| Değişim, biri veya diğeri
(…) Bir ifadenin parçasının mantıksal gruplaması
$yumurta '(^kök|^uucp|^posta)' /vesaire/şifre

Bu, dosyadan root, uucp veya mail ile başlayan satırları çıkarır, | seçeneklerden herhangi biri anlamına gelen sembol.

Aşağıdaki komut Olumsuz çalışır, ancak hiçbir mesaj görüntülenmemesine rağmen, temel kavramak komutu tüm normal ifadeleri desteklemez:

$kavramak '(^kök|^uucp|^posta)' /vesaire/şifre

Ancak, çoğu Linux sisteminde komut grep -E kullanmakla aynıdır yumurta :

$kavramak -VE '(^kök|^uucp|^posta)' /vesaire/şifre

Filtreleri Kullanma

boru tesisatı bir komutun çıktısını başka bir komuta girdi olarak gönderme işlemidir ve mevcut en güçlü Linux araçlarından biridir.

Bir işlem hattında görünen komutlara genellikle filtreler denir, çünkü çoğu durumda değiştirilmiş akışı standart çıkışa göndermeden önce kendilerine iletilen girişi gözden geçirir veya değiştirirler.

Aşağıdaki örnekte, standart çıktı ls -l standart girdi olarak iletilir kavramak emretmek. Çıkış kavramak komut daha sonra girdi olarak iletilir daha fazla emretmek.

Bu, yalnızca içindeki dizinleri görüntüler. /vesaire :

$ls -NS /vesaire|kavramak'^d'|daha fazla

Aşağıdaki komutlar, filtre kullanma örnekleridir:

$ps -ef|kavramakcron

$kim|kavramakkdm

Örnek Dosya

İnceleme alıştırmasını denemek için öncelikle aşağıdaki örnek dosyayı oluşturun.

Aşağıdaki metni bir dosyaya kopyalamak için nano veya vim gibi bir düzenleyici kullanın. insanlar:

Kişisel J.Smith 25000
Kişisel E.Smith 25400
Eğitim A.Kahverengi 27500
Eğitim C.Brown 23400
(Yönetici) R.Bron 30500
Goodsout T.Smyth 30000
Kişisel F.Jones 25000
eğitim* C.Evans 25500
Goodsout W.Pope 30400
Zemin Kat T.Smythe 30500
Kişisel J.Maler 33000

Egzersiz II

  1. Dosyayı göster insanlar ve içeriğini inceleyin.
  2. Dizeyi içeren tüm satırları bulun Smith people.Hint dosyasında: grep komutunu kullanın, ancak varsayılan olarak büyük/küçük harf duyarlı olduğunu unutmayın.
  3. Dize ile başlayan tüm satırları içeren yeni bir dosya oluşturun, npeople Kişiye özel insanlar dosyasında.İpucu: > ile grep komutunu kullanın.
  4. Dosyayı listeleyerek npeople dosyasının içeriğini onaylayın.
  5. Şimdi metnin dizeyle bittiği tüm satırları ekleyin 500 people dosyasında npeople.Hint dosyasına gidin: grep komutunu >> ile kullanın.
  6. Yine, dosyayı listeleyerek npeople dosyasının içeriğini onaylayın.
  7. Dosyada saklanan sunucunun IP Adresini bulun /etc/hostlar .İpucu: $(hostname) ile grep komutunu kullanın
  8. Kullanmak yumurta -den çıkarmak /etc/passwd içeren dosya hesap satırları lp ya da kendi Kullanıcı kimliği .

Egzersiz çözümleri bu makalenin sonunda bulunabilir.

Daha Normal İfadeler

Normal bir ifade, steroidlerde joker karakterler olarak düşünülebilir.

Özel anlamları olan on bir karakter vardır: açılış ve kapanış köşeli parantezleri [ ], ters eğik çizgi , şapka ^, dolar işareti $, nokta veya nokta., dikey çubuk veya çizgi simgesi |, soru işareti ?, yıldız veya yıldız *, artı işareti + ve açılış ve kapanış yuvarlak parantez { }. Bu özel karakterlere genellikle meta karakterler de denir.

İşte özel karakterlerin tam seti:

^ Bir satırın başlangıcı
$ Bir satırın sonu
. Herhangi bir karakter ( yeni satır hariç)
* 0 veya daha fazla önceki ifade
| Değişim, biri veya diğeri
[…] Eşleşecek açık karakter kümesi
+ 1 veya daha fazla önceki ifade
? 0 veya 1 önceki ifade
Bir sembolün önüne geçmek onu gerçek bir karakter yapar
{…} Açık niceleyici gösterimi
(…) Bir ifadenin parçasının mantıksal gruplaması

Varsayılan sürümü kavramak yalnızca sınırlı düzenli ifade desteğine sahiptir. Aşağıdaki örneklerin tümünün çalışması için şunu kullanın: yumurta bunun yerine veya grep -E .

kullanarak satırları bulmak için | herhangi bir ifadeyle eşleşmek için:

$yumurta'xxz|xzz' dosyam

Kullanarak satırları bulmak için | bir dize içindeki ifadelerden herhangi birini eşleştirmek için ayrıca ( ) öğesini kullanın:

$yumurta'^ X(Yz|yz)benim dosyam

[ ] kullanarak herhangi bir karakterle eşleşen satırları bulmak için:

$yumurta'^ X[yy]z 'dosyam

[ ] kullanarak herhangi bir karakterle eşleşmeyecek satırları bulmak için:

$yumurta'^ X[^ Yy]z 'dosyam

Önceki ifadenin 0 veya daha fazlasıyla eşleşmesi için * kullanarak satırları bulmak için:

$yumurta'^xy*z 'dosyam

+ kullanarak önceki ifadenin 1 veya daha fazlasını eşleştirmek için satırları bulmak için:

$yumurta'^xy+z' dosyam

kullanarak satırları bulmak için? önceki ifadenin 0 veya 1'ini eşleştirmek için:

$yumurta'^xy?z' dosyam

Egzersiz III

  1. Adları içeren tüm satırları bulun Evans veya ressam dosyada insanlar.
  2. Adları içeren tüm satırları bulun Smith, Smith veya Smythe dosyada insanlar.
  3. Adları içeren tüm satırları bulun kahverengi, kahverengi veya Kaynak dosyada insanlar. Vaktiniz varsa:
  4. Dizeyi içeren satırı bulun (yönetici), parantezler dahil, dosyadaki insanlar.
  5. People dosyasında * karakterini içeren satırı bulun.
  6. Her iki ifadeyi de bulmak için yukarıdaki 5 ve 6'yı birleştirin.

Daha fazla örnek

kullanarak satırları bulmak için . ve * herhangi bir karakter kümesiyle eşleşmek için:

$yumurta'^xy.*z 'dosyam

N sayıda karakterle eşleşmek üzere { } kullanarak satırları bulmak için:

$yumurta'^xy{3}z 'dosyam
$yumurta'^xy{4}z 'dosyam

N veya daha fazla kez eşleştirmek üzere { } kullanarak satırları bulmak için:

$yumurta'^xy{3,}z 'dosyam

{ } kullanarak N kere eşleşen ancak M kereden fazla olmayan satırları bulmak için:

$yumurta'^xy{2,3}z 'dosyam

Çözüm

Bu eğitimde ilk olarak kullanmaya baktık kavramak bir dosyada veya birden çok dosyada metin bulmak için basit bir biçimde. Daha sonra aranacak metni basit düzenli ifadelerle ve daha sonra kullanarak daha karmaşık ifadelerle birleştirdik. yumurta .

Sonraki adımlar

Umarım burada edindiğiniz bilgileri iyi bir şekilde kullanırsınız. Denemek kavramak kendi verileriniz üzerinde komutlar ve unutmayın, burada açıklandığı gibi düzenli ifadeler aynı formda kullanılabilir. Biz , sed ve awk !

Egzersiz Çözümleri

Egzersiz I

İlk önce dosyada kaç satır olduğunu sayın /etc/passwd .
$ wc -l /etc/passwd
Şimdi metnin tüm oluşumlarını bulun nerede /etc/passwd dosyasında.
$ grep var /etc/passwd
Dosyadaki kaç satırın metni içerdiğini bulun nerede

kavramak -Cnerede/vesaire/şifre

Metni İÇERMEYEN kaç satırı bulun nerede .

kavramak -Özgeçmişnerede/vesaire/şifre

Girişiniz için girişi şurada bulun: /etc/passwd dosya
grep kdm /etc/passwd

Egzersiz II

Dosyayı göster insanlar ve içeriğini inceleyin.
$ cat people
Dizeyi içeren tüm satırları bulun Smith dosyanın içinde insanlar .
$ grep 'Smith' people
Yeni bir dosya oluşturun, insan dize ile başlayan tüm satırları içeren Kişiye özel içinde insanlar dosya
$ grep '^Personal' people> npeople
Dosyanın içeriğini onaylayın insan dosyayı listeleyerek.
$ cat npeople
Şimdi metnin dizeyle bittiği tüm satırları ekleyin 500 dosyanın içinde insanlar dosyaya insan .
$ grep '500$' people>>npeople
Yine, dosyanın içeriğini onaylayın insan dosyayı listeleyerek.
$ cat npeople
Dosyada saklanan sunucunun IP Adresini bulun /etc/hostlar .
$ grep $(hostname) /etc/hosts
Kullanmak yumurta -den çıkarmak /etc/passwd içeren dosya hesap satırları lp veya kendi kullanıcı kimliğiniz.
$ egrep '(lp|kdm:)' /etc/passwd

Egzersiz III

Adları içeren tüm satırları bulun Evans veya ressam dosyanın içinde insanlar .
$ egrep 'Evans|Maler' people
Adları içeren tüm satırları bulun Smith , Smyth veya Smythe dosyanın içinde insanlar .
$ egrep 'Sm(i|y)the?' people
Adları içeren tüm satırları bulun Kahverengi , kahverengi veya Kaynak dosyada insanlar.
$ egrep 'Brow?e?n' people
Dizeyi içeren satırı bulun (yönetici), parantezler dahil, dosyada insanlar .

$yumurta '(Yönetici)'insanlar

Karakteri içeren satırı bulun * dosyada insanlar.
$ egrep '*' people
Her iki ifadeyi de bulmak için yukarıdaki 5 ve 6'yı birleştirin.

$yumurta '(Yönetici)|*'insanlar