Linux kullanıcılarından oluşan bir kalabalıkta “normal ifadeler” ağlarsanız, ne olur? Herkes size bunları nasıl kullanacağınızı söyleyecek ve her cevap farklı olacak.
Normal İfadeler – Genellikle Regex olarak adlandırılır – bir metinde araştırma modelini tanımlayan karakter dizileridir. Bu nedenle sadece bir hedefleri var gibi görünüyor. Ama ne kadar yararlı olduklarını görünce şaşıracaksınız.
Ortaklar, kelime işleme, veri doğrulama ve diğer birçok şey için düzenli ifadeler kullanılabilir.
Normal ifadelerin kullanımı çok karmaşık olabilir
Düzenli ifadeler kullanmanın tek dezavantajı, çok karmaşık hale gelebilmeleridir. Ve bu kendi başına bir dil oluşturma noktasına kadar.
Düzenli ifadelerin kontrolünü ele geçirdikten sonra, onları paha biçilmez bulacaksınız. Başka bir şeyle yapamayacağınız normal ifadelerle yapabileceğiniz şeyler var. Ve komut satırı veya hatta çok güçlü bash betiğiyle etkileşim kurarlar.
Normal ifadeleri kullanmanın beş farklı yolunu sunmama izin verin. Her şeyden önce, Regex desenleri hakkında konuşalım.
İfade için düzenli bir neden nedir?
Normal ifadeler hakkında anlamanız gereken dört temel kavram vardır:
- Gerçek karakterler Belirtilen kesin (ler) karakterlerine karşılık gelir (örneğin, “Merhaba” yalnızca “Merhaba” a karşılık gelir).
- Karakter sınıfları Bir set içindeki karakterleri bir araya getirin (örneğin, [a-zA-Z] “A” ila “Z”) tüm harflerine karşılık gelir).
- Desen Arama (Desen Eşleştirme) karakter dizelerindeki kalıpları aramak için kullanılır (örneğin, w herhangi bir sözlü karaktere karşılık gelir, [a-zA-Z0-9_]).
- Nicelleştiriciler Bir paternin kaç kez aranması gerektiğini belirtin (örneğin, * 0 veya daha fazla oluşumlara karşılık gelir, + 1 veya daha fazla oluşuma karşılık gelir).
İşte normal ifadelerin sözdizimine genel bir bakış:
- ^ – Zincirin başlangıcı
- – egzoz karakteri
- . – Herhangi bir benzersiz karakter
- [a-z] – ‘A’ ila ‘Z’
- [A-Z] – “A” ila “Z” nden herhangi bir sermaye mektubu.
- [0-9] – 0’dan 9’a kadar herhangi bir rakam
- $ – kanalın sonu
İşte bazı temel örnekler:
- Zdnet – “Zdnet” nin gerçek zincirine karşılık gelir.
- [a-zA-Z] – ‘A’ ila ‘Z’ ile herhangi bir harfe karşılık gelir.
- D {5} – tam olarak 5 haneye karşılık gelir (örneğin, 01234).
- ^Zdnet $ – Bir zincirin başlangıcını ve sonunu araştırın, gerçekten “zdNet” (ve başka bir kanalın parçası değil) olmasını sağlayın.
- (ABC) – Karakterleri daha sonra yakalamak ve referans alacak şekilde gruplandırır.
- S+ – Uzaysız bir veya daha fazla karakter arayın.
Örneğin, GREP komutunu kullanarak ZDNet kanalını bir metin dosyasında (Test adlı) arayabilirim:
Diyelim ki merhaba, zdnet! Bu dosyanın üstünde. Yukarıdaki komut aşağıdaki sonucu üretecektir:
Ya ^zdnet $ kullanırsam? Yukarıdaki örnekte, ZDNet daha uzun karakter dizisinin bir parçasıdır ve bu nedenle hiçbir sonuç üretmez. Öte yandan, sadece zdnet içeren bir çizgi varsa, komutu kullanarak bulabilirim:
$ Karakter, karakter dizesinin sonunu işaret eder, böylece desen arayışı zdNet’ten sonra durur.
Şimdi Linux altında normal ifadeleri kullanmanın beş farklı yolunu görelim.
1. Dosya Yönetimi (grep komutunun yardımıyla)
GREP komutuyla nasıl düzenli ifadelerin kullanılabileceğini zaten gösterdim. Ancak GREP komutunu kullanarak komut satırından Linux altındaki dosyaların yönetimini de optimize edebileceğinizi bilmek önemlidir. Düzenli ifadeler ve grep ile, basit veya çok karmaşık desenlere sahip metin dosyalarında desenleri arayabilirsiniz.
Beyaz alanlara ve noktalama işaretlerine uyacak şekilde rasyonel ifadeler de kullanabilirsiniz. Bu, noktalama işaretinden sonra ek alanları çıkarmak için yararlı olabilir. İşte bir örnek:
- Grep -e ‘ [^a-zA-Z0-9.?!]’input.txt
Decompos:
- GREP – Bir desene karşılık gelen satırları aramaya ve görüntülemeye izin veren komut.
- -E – normal ifadelerin genişletilmiş sözdizimini etkinleştirir.
- ‘ – Herhangi bir boşluk karakterini arayın (ek boşluklar dahil).
- [^a-zA-Z0-9.?!] – Nokta (.), Soru işareti (?), Ünlem noktası (!) Ve rakamlar (0-9) hariç herhangi bir noktalama işaretine karşılık gelen önceki nedenin olumsuzlanması. Olumsuzluk karakterlerle temsil edilir [].
- Input.txt – Arama Dosyası.
- ‘ – Normal ifadeyi çevreleyen iki basit alıntının ikincisi.
Bu dosyanın aşağıdaki satırları içerdiğini varsayalım:
1. Merhaba, zdnet! Günün nasıldı ?
2. Zdnet
3. Benim adım Jack. Seninki nedir?
Sadece ilk satırda, küçük bir mektup (AZ), bir başkent (AZ), bir figür (0-9), bir nokta (.), Bir soru işareti (?) Veya bir ünlem işareti (!) Olmayan bir karakterden önce bir alanım var, böylece ekran sadece bu satırı içeriyor.
2. Metin Sürümü (Vim – VI Geliştirilmiş)
Vim, Regex desenlerini destekleyen güçlü bir metin düzenleyicisidir. Ne yazık ki, en sevdiğim yayıncı (Nano) Regex’i desteklemiyor. Bu özelliğe ihtiyacım olursa, Vim’e ciddi bir şekilde saldırmam gerekiyor.
Diyelim ki aşağıdaki metni içeren bir dosyam var:
” eskimiş Oak, yüzyıllardır parkın merkezinde gururla sıralanıyor.
Büyükbabam hala onu giydi eskimiş Yaz aylarında bile yünlü ceket.
O aldı yeni Mağazada piyasaya sürülmez telefon edin. “
“Eski” ni manuel olarak “yeni” ile değiştirmek istiyorsanız ne olur? Dosya yalnızca üç satır ise basittir. Ancak çok daha uzunsa, bu değişikliği otomatik olarak yapmak için aşağıdaki Regex komutunu (VIM’de) kullanabilirsiniz:
İşte bu siparişin ayrışması:
– değiştirilecek desen. “Eski” kelimesine karşılık gelir, başka bir kelimenin bir kısmına değil. Bir kelimenin sonunda sembol . - / new/ – yedek zincir. Yine, sadece tüm kelimelerin değiştirilmesini sağlamak için kelimelerin kelimelerini kullanıyoruz.
- G – tüm çizgideki tüm olayların ikamesi uygulayan küresel gösterge.
3. Metin Sürümü (Find ve SED ile)
SED komutu başka bir metin düzenleme yöntemidir. Bu, metin dosyalarında arama ve değiştirme için bir başka ilginç seçenektir. Önceki örneğe geri dönelim ve aşağıdaki komutu kullanarak yeni başına eski değiştirelim:
- Bulmak. -Name “*.txt” -exec sed -e ‘s/eski/yeni/g’ {} ;
-Exec seçeneğini, Find komutu tarafından bulunan her dosyada bir komut yürütmek için kullanırız. Aynı şeyi düzenli ifadelerin gücünü gösteren birkaç dosya *.txt ile de yapabilirsiniz.
4. IP komutuyla ağ yapılandırması
Birkaç ağ kartının bağlı olduğu bir makinem olduğunu varsayalım (yerel ağıma bağlı bir sunucu olduğunu gösteren). Makinede dahili ve harici ağ bağlantıları olabilir. Ve sadece IP adresi 192.168.1 ile başlayan bağlantıları görmek istiyorum. Bunu yapmak için iki sipariş ve rasyonel bir ifade kullanıyorum. İki sipariş IP ve GREP’dir. Son sipariş kendini aşağıdaki gibi sunar:
- IP Addr | Grep -eo ‘192 .168 .1 .[0-9]{1,3} ‘
5. Günlüklerin görselleştirilmesi
Sık sık kuyruk komutu ile günlüklerim ve sadece neye ihtiyacım olduğunu görmek için normal ifadeler kullanabilirim. Örneğin, yalnızca/var/log/syslog’da görünen hataları veya uyarıları görmek isteyebilirim. Bu dosyayı (Syslog dosyasında yazılmış en son girişlerin gerçek zamanında bir güncellemeyi tutacak) aşağıdaki gibi takip edebilirim:
Daha sonra bir hata veya uyarı arayışında görüntülenen cevaba göz atmalıyım. Bu nedenle en iyi seçenek, yalnızca bir hata veya uyarı içeren girişlerin görüntülenmesi için normal ifadeleri kullanmak olacaktır. Ve orada kuyruk ve grep kullanıyorum:
- Kuyruk -f/var/log/syslog | Grep -e ‘hata | Uyarı’
Burada arkadaşlarım, normal ifadeleri nasıl kullanıyorum. Tabii ki, sadece onların kullanımına dokundum. Düzenli ifadeler açısından acemi iseniz, küçük başlayın ve ilerlemek için bir AI chatbot kullanmanızı tavsiye ederim. Çok çok kullanışlıdırlar çünkü Regex’e özellikle iyi hakim olurlar.


