grep

Normal ifadeyle grep kullanarak metin dosyalarında dizeleri bulma

Normal ifadeyle grep kullanarak metin dosyalarında dizeleri bulma
grep, bir metin dosyasındaki dizeleri aramak ve bulmak için en popüler araçlardan biridir. 'Grep' adı, artık kullanılmayan Unix ed satır düzenleyici aracındaki bir komuttan türetilmiştir - arama için ed komutu küresel için bir dosya aracılığıyla Düzenli ifade ve sonra baskı o satırlar g/tekrar/p, kullanacağınız normal ifade neredeydi. Sonunda, ed kullanılmadığında bir dosyada bu aramayı yapmak için grep komutu yazılmıştır.

Bu makalede, Grep'in uygulamalarıyla ilgili 10 uygulamalı örnek vererek, normal ifadeyle kullanarak gelişmiş dize araması çalıştırmayı göstereceğiz. Bu makalede tartışılan birçok örneğin pratik sonuçları vardır, yani bunları günlük Linux programlamanızda kullanabilirsiniz. Aşağıdaki örnekler, yaygın olarak aranan kalıplar için bazı normal ifade örneklerini açıklar.

Örnek 1: Bir Metin Dosyasında Tek Bir Kiralayan Kişi Bulun

'Kitap' dosyasında '$' karakteri içeren satırların çıktısını almak için şunu yazın:

$ grep '\$' kitabı

Ör 2: Metin Dosyasında Tek Bir Dize Bulun

'$14' dizesini içeren 'kitap' dosyasındaki satırların çıktısını almak için.99', yazın:

$ grep '\$14\.99' kitap

Ör 3: Bir Metin Dosyasında Tek Bir Özel Kiralayan Kişi Bulun

'Kitap' dosyasında '\' karakteri içeren satırlar çıkarmak için şunu yazın:

$ grep '\\' kitabı

Ör 4: Belirli Metinle Başlayan Satırları Eşleştirme

Bir satırın başlangıcını belirtmek için normal ifadede 'ˆ' kullanın.

'/usr/dict/words' içindeki 'pro' ile başlayan tüm satırların çıktısını almak için şunu yazın:

$ grep 'ˆpro' /usr/dict/words

'Kitap' dosyasındaki, 'başlangıçta' metniyle başlayan tüm satırları, büyük/küçük harf fark etmeksizin, çıktı olarak almak için şunu yazın:

$ grep -i 'ˆbaşlangıçta' kitabı

NOT: Bu normal ifadeler 'karakterleri ile alıntılanmıştır; bunun nedeni, bazı mermilerin 'ˆ' karakterini özel bir "meta karakter" olarak ele almasıdır

Kelime ve kelime öbeği aramalarına ek olarak, normal ifadeler olarak adlandırılan karmaşık metin kalıplarını aramak için grep kullanabilirsiniz. Normal ifade veya "regexp", belirli bir özel karakterden oluşan bir metin dizesidir Ayarlamak eşleşecek desenler.

Teknik olarak konuşursak, kelime veya ifade kalıpları normal ifadelerdir - sadece çok basit olanlar. Normal bir ifadede, harfler ve sayılar dahil olmak üzere çoğu karakter kendilerini temsil eder. Örneğin, normal ifade kalıbı 1 '1' dizesiyle ve desenle eşleşir oğlan 'boy' dizesiyle eşleşir.

Kendilerini düzenli bir ifadede temsil etmeyen, ancak karmaşık kalıplar oluşturmak için kullanılan özel bir anlamı olan metakarakter adı verilen bir dizi ayrılmış karakter vardır. Bu meta karakterler aşağıdaki gibidir: ., *, [, ], ˆ, $ ve \. Bu tür meta karakterlerin neredeyse tüm yaygın ve özel Linux dağıtımlarında ortak olduğunu belirtmekte fayda var. İşte meta karakterlerin özel anlamlarını kapsayan ve kullanımlarına dair örnekler veren güzel bir makale.

Ör 5: Belirli Metinle Biten Satırları Eşleştirme

Bu metni yalnızca bir satırın sonunda eşleştirmek için alıntılanan metnin son karakteri olarak '$' kullanın. 'Giden' dosyasında ünlem işaretiyle biten satırların çıktısını almak için şunu yazın:

$ grep'!$' gidiyor

Ör 6: Belirli Bir Uzunlukta Eşleşen Doğrular

Belirli bir uzunluktaki çizgileri eşleştirmek için bu sayıyı '.' ' ' ve '$' arasındaki karakterler - örneğin, iki karakter (veya sütun) genişliğindeki tüm satırları eşleştirmek için, aranacak normal ifade olarak 'ˆ… $' kullanın.

Tam olarak üç karakter genişliğindeki '/usr/dict/words' içindeki tüm satırların çıktısını almak için şunu yazın:

$ grep 'ˆ… $' /usr/dict/words

Daha uzun satırlar için farklı bir yapı kullanmak daha yararlıdır: 'ˆ.\sayı\$', burada sayı eşleşecek satır sayısıdır. Bir sayı aralığı belirtmek için ',' kullanın.

Tam olarak on iki karakter genişliğindeki '/usr/dict/words' içindeki tüm satırların çıktısını almak için şunu yazın:

$ grep 'ˆ.\12\$' /usr/dict/words

Yirmi iki veya daha fazla karakter genişliğindeki tüm satırları '/usr/dict/words' olarak almak için şunu yazın:

$ grep 'ˆ.\22,\$' /usr/dict/words

Ör 7: Bazı Normal İfadelerden Herhangi Birini İçeren Eşleşen Çizgiler

Bir dizi normal ifadeden herhangi birini içeren satırları eşleştirmek için, alternatif operatörler ('\|') arasında aranacak normal ifadelerin her birini aranacak normal ifade olarak belirtin. Verilen normal ifadelerden herhangi birini içeren satırların çıktısı alınacaktır.

"Kitap" veya "kek" kalıplarını içeren "playboy"daki tüm satırların çıktısını almak için şunu yazın:

$ grep 'kitap\|kek' playboy

Ör 8: Bazı Normal İfadelerin Tümünü İçeren Eşleşen Çizgiler

Eşleşen satırları çıkarmak için herşey bir dizi normal ifadeden, eşleştirmek istediğiniz ilk normal ifadeyi içeren satırları çıkarmak için grep kullanın ve argüman olarak ikinci normal ifadeyle çıktıyı bir grep'e iletin. Aramak istediğiniz tüm normal ifadeler için grep aramalarına boru eklemeye devam edin.

'Kıyı' ve 'gökyüzü' kalıplarını içeren 'oynatma listesindeki' tüm satırları, büyük/küçük harfe bakılmaksızın, şunu yazın:

$ grep -i 'kıyı' çalma listesi | grep -i gökyüzü

Ör 9: Yalnızca Belirli Karakterleri İçeren Satırları Eşleştirme

Yalnızca belirli karakterleri içeren satırları eşleştirmek için 'ˆ[karakterler]*$' normal ifadesini kullanın, burada karakterler eşleşecek olanlardır.  '/usr/dict/words' biçiminde yalnızca sesli harfler içeren satırlar çıkarmak için şunu yazın:

$ grep -i 'ˆ[aeiou]*$' /usr/dict/words

'-i' seçeneği, büyük/küçük harfe bakılmaksızın karakterlerle eşleşir; bu nedenle, bu örnekte, büyük/küçük harfe bakılmaksızın tüm sesli harfler eşleştirilir.

Ör 10: Boşluklara Bakmaksızın Cümleleri Bulma

Sözcükler arasında veya bir satır veya sayfa sonu boyunca fazladan boşluklarla oluşabilecek bir tümceyi aramanın bir yolu, girişteki tüm satır beslemelerini ve fazladan boşlukları kaldırmak ve ardından bunu grep yapmaktır. Bunu yapmak için, girişi "\r\n:\>\|-" ile '-d' seçeneğinin argümanı olarak tr'ye yönlendirin (girişteki tüm satır sonlarını kaldırarak); bunu '-u' seçeneğiyle fmt filtresine iletin (metni tek tip aralıkla çıktılar); ve aranacak desenle grep yapmak için boru.

'Docs' dosyasındaki 'aynı anda' dizesini satır sonları arasında aramak için şunu yazın:

$ kedi belgeleri | tr -d '\r\n:\>\|
-' | fmt -u | grep 'aynı anda'

Özet

Bu makalede, bir metin dosyasında dizeleri aramak ve bulmak için Grep Linux komutunu kullanmanın 10 pratik örneğini inceledik. Bu arada, metin dosyalarında karmaşık aramalar yapmak için normal ifadeleri Grep ile birlikte kullanmayı öğrendik. Artık Linux arama işlevlerinin ne kadar güçlü olduğu konusunda daha iyi bir fikriniz var.

Linux programlama hakkında daha fazla bilgi edinmek isteyenler için ek kaynaklar şunlardır:

Sistem Yöneticileri için Kaynaklar

Linux Çekirdeği Programcıları için Kaynaklar

Linux Dosya Sistemi Sözlüğü

Linux Dosya ve Dizin Sisteminin Nasıl Çalıştığına İlişkin Kapsamlı İnceleme

En İyi Oculus Uygulama Laboratuvarı Oyunları
Oculus başlık sahibiyseniz, yandan yükleme hakkında bilgi sahibi olmalısınız. Sideloading, kulaklığınıza mağaza dışı içerik yükleme işlemidir. SideQue...
Ubuntu'da Oynanacak En İyi 10 Oyun
Windows platformu, günümüzde doğal olarak Windows'u desteklemek için geliştirilen oyunların büyük bir yüzdesi nedeniyle oyun oynamak için hakim platfo...
Linux için En İyi 5 Arcade Oyunu
Günümüzde bilgisayarlar oyun oynamak için kullanılan ciddi makinelerdir. Yeni yüksek puanı alamazsan, ne demek istediğimi anlayacaksın. Bu yazıda, bug...