Linux terminali hakkında her zaman sevdiğim şeylerden biri, normal ifadeleri kullanarak elde edebileceğiniz şeylerdir. İster karmaşık bir metin bulmamız gerekse de onu başka bir şeyle değiştirmemiz gerekse, normal ifadeler kullanmak işi büyük ölçüde basitleştirebilir. Baştan başlayalım:
Normal ifade nedir?
Normal ifade, bulmak istediğimiz bir metni tanımlamamıza izin veren bir dizi özel karakterdir. Örneğin "linux" kelimesini aramak istersek, kullandığımız programa bu kelimeyi koymamız yeterli olacaktır. Kelimenin kendisi düzenli bir ifadedir. Şimdiye kadar çok basit görünüyor, ama ya tüm sayıları belirli bir dosyada bulmak istersek? Veya büyük harfle başlayan tüm satırlar? Bu durumlarda artık basit bir kelime söyleyemezsiniz. Çözüm, normal bir ifade kullanmaktır.
Düzenli ifadeler ve dosya kalıpları.
Düzenli ifadeler konusuna girmeden önce, normal ifadeler hakkındaki yaygın bir yanlış anlaşılmayı gidermek istiyorum. Normal bir ifade, sabit sürücüdeki çeşitli dosyalara başvurmak için rm, cp, vb. Gibi komutlara parametre olarak koyduğumuz şey değildir. Bu bir dosya kalıbı olacaktır. Normal ifadeler, bazı ortak karakterleri kullanmaları bakımından benzer olsalar da, farklıdır. Sabit diskteki dosyalara karşı bir dosya kalıbı çalıştırılır ve kalıpla tam olarak eşleşenleri döndürürken, bir metne karşı normal bir ifade çalıştırılır ve aranan metni içeren satırları döndürür. Örneğin, kalıba karşılık gelen normal ifade *.*
gibi bir şey olurdu ^.*\..*$
Normal ifade türleri.
Tüm programlar aynı normal ifadeleri kullanmaz. Çok az değil. Birkaç standart normal ifade türü vardır, ancak sözdizimini biraz değiştiren, kendi uzantılarını içeren ve hatta tamamen farklı karakterler kullanan programlar vardır. Bu nedenle, iyi bilmediğiniz bir programla düzenli ifadeler kullanmak istediğinizde, ilk yapmanız gereken, tanıdığı normal ifadelerin neye benzediğini görmek için programın kılavuzuna veya belgelerine bakmaktır.
Birincisi, Linux araçlarının kullandığı POSIX standardında bulunan iki ana düzenli ifade türü vardır. Bunlar temel ve genişletilmiş düzenli ifadelerdir. Grep veya sed gibi normal ifadelerle çalışan komutların çoğu bu iki türü kullanmanıza izin verir. Aşağıda onlar hakkında konuşacağım. Ayrıca PERL tarzı düzenli ifadeler de vardır ve daha sonra bunların varyantlarını kullanan vim veya emacs gibi programlar vardır. Ne yapmak istediğimize bağlı olarak, birini veya diğerini kullanmak daha uygun olabilir.
Normal ifadeleri test etme.
Normal ifadelerin sözdizimi önemsiz bir şey değildir. Karmaşık bir düzenli ifade yazmamız gerektiğinde, ilk bakışta anlaşılması imkansız olan bir dizi özel karakterin önünde olacağız, bu yüzden onları nasıl kullanacağımızı öğrenmek için istediğimiz tüm testleri yapmanın ve sonuçları kolayca görmenin bir yolunu bulmamız çok önemlidir. Bu yüzden şimdi testleri yapabileceğimiz ve normal ifadeler hakim olana kadar ihtiyacımız olan her şeyi deneyebileceğimiz birkaç komut koyacağım.
İlki grep komutudur. Bu, arama yapmak için en sık kullanacağımız komuttur. Sözdizimi aşağıdaki gibidir:
grep [-E] 'REGEX' FICHERO
COMANDO | grep [-E] 'REGEX'
Kabuğun ona ulaşmaması için her zaman normal ifadeleri tek tırnak içine koymanızı öneririm. İlk yol, bir dosyada normal bir ifade bulmaktır. İkincisi, bir komutun çıktısının normal bir ifade aracılığıyla filtrelenmesine izin verir. Varsayılan olarak grep, temel normal ifadeleri kullanır. -E seçeneği, genişletilmiş normal ifadeleri kullanmak içindir.
Normal ifadelerin nasıl çalıştığını görmemize yardımcı olabilecek bir numara, grep komutunda renk kullanımını etkinleştirmektir. Bu şekilde, metnin kullandığımız normal ifadeyle eşleşen kısmı vurgulanacaktır. Grep komutundaki rengi etkinleştirmek için ortam değişkeninin GREP_OPTIONS
değer içermek --color
, bu komutla yapılabilir:
GREP_OPTIONS=--color
Her zaman etkinleştirilmesi için .bashrc'ye koyabiliriz.
Normal ifadeleri kullanmanın başka bir yolu da sed komutunu kullanmaktır. Bu, metni değiştirmek için daha uygundur, ancak arama için de kullanılabilir. Bunun sözdizimi şu şekilde olacaktır:
sed -n[r] '/REGEX/p' FICHERO
COMANDO | sed -n[r] '/REGEX/p'
Sed komutu ayrıca varsayılan olarak temel normal ifadeleri kullanır, genişletilmiş normal ifadeleri -r seçeneğiyle kullanabilirsiniz.
Adını da vermek istediğim bir diğer komut ise awk. Bu komut, kendi programlama dilinizde komut dosyaları yazmanıza izin verdiği için birçok şey için kullanılabilir. İstediğimiz şey bir dosyada veya bir komutun çıktısında normal bir ifade bulmaksa, onu kullanmanın yolu şu olacaktır:
awk '/REGEX/' FICHERO
COMANDO | awk '/REGEX/'
Bu komut her zaman genişletilmiş normal ifadeler kullanır.
Testlerimizi yapmak için, aynı zamanda onu araştırmak için örnek teşkil edecek bir metne de ihtiyacımız olacak. Aşağıdaki metni kullanabiliriz:
- Lista de páginas wiki: ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ - Fechas de lanzamiento: Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10/2004 Desde Linux Rulez.
Bu, yazının geri kalanının örnekleri için kullanacağım metindir, bu yüzden terminalden elinizin altında olması için bir dosyaya kopyalamanızı tavsiye ederim. İstediğiniz ismi koyabilirsiniz. Ben buna regex adını verdim.
Başlangıç dersi.
Artık normal ifadeleri test etmeye başlamak için ihtiyacımız olan her şeye sahibiz. Yavaş yavaş gidelim. Her karakterin ne işe yaradığını açıklayacağım, normal ifadeler içeren birkaç arama örneği koyacağım. Çok iyi örnekler değiller ama çok uzun bir yazım olacağından artık bunu karmaşıklaştırmak istemiyorum. Ve ben sadece normal ifadelerle yapılabileceklerin yüzeyini kazıtacağım.
Hepsinden basit olanı, belirli bir kelimeyi aramaktır, örneğin, "Linux" kelimesini içeren tüm satırları aramak istediğimizi varsayalım. Bu en kolayı çünkü sadece yazmamız gerekiyor:
grep 'Linux' regex
Ve sonucu görebiliriz:
KemerLinux: https://wiki.archlinux.org/ Kemer Linux: 11-03-2002 Gönderen Linux Rulez.
Bunlar, "Linux" kelimesini içeren üç satırdır ve renk numarasını kullanırsak vurgulanmış olarak görünecektir. "ArchLinux" gibi daha uzun bir kelimenin parçası olsa bile aradığımız kelimeyi tanıdığına dikkat edin. Ancak, "https://wiki.archlinux.org/" URL'sinde görünen "linux" kelimesini vurgulamaz. Bunun nedeni, küçük "l" harfiyle görünmesi ve biz onu büyük harfle aramasıdır. Grep komutunun bunun için seçenekleri vardır, ancak bunlar hakkında normal ifadeler üzerine bir makalede bahsetmeyeceğim.
Bu basit testle ilk sonuca varabiliriz:
- Normal bir ifadeye yerleştirilen normal bir karakter kendisiyle eşleşir.
Yani "a" harfini koyarsanız "a" harfini arayacaktır. Mantıklı görünüyor, değil mi? 🙂
Şimdi, "CentO" kelimesini ve ardından herhangi bir karakteri, ancak yalnızca tek bir karakteri aramak istediğimizi varsayalım. Bunun için herhangi bir karakterle eşleşen ancak yalnızca biriyle eşleşen bir joker karakter olan "." Karakterini kullanabiliriz:
grep 'CentO.' regex
Ve sonuç:
CentOS: http://wiki.centos.org/ CentOS: 14-05-2004 03:32:38
Bu, bir durumda büyük ve başka bir küçük harf olmasına rağmen, "CentOS" da "S" harfini içerdiği anlamına gelir. O yerde başka bir karakter ortaya çıkarsa, onu da içerecektir. Zaten ikinci kurala sahibiz:
- Karakter "." herhangi bir karakterle eşleşir.
Artık göründüğü kadar önemsiz değil, ama bununla fazla bir şey yapamayız. Biraz daha ileri gidelim. Diyelim ki 2002 ve 2004 yıllarının geçtiği satırları bulmak istiyoruz.İki arama gibi görünüyorlar ama aynı anda şu şekilde yapılabilir:
grep '200[24]' regex
Bu, 200 sayısını ve ardından 2 veya 4'ü bulmak istediğimiz anlamına gelir. Ve sonuç şu:
ArchLinux: 11-03-2002 Gentoo: 31/03 /2002 CentO'lar: 14-05-2004 03:32:38 Ubuntu: 20/10/2004
Bu da bizi üçüncü kurala getiriyor:
- Parantez içindeki birden çok karakter, parantez içindeki herhangi bir karakterle eşleşir.
Parantezler daha fazla oyun sağlar. karakterleri hariç tutmak için de kullanılabilirler. Örneğin, ":" karakterinin göründüğü, ancak ardından "/" karakterinin gelmediği siteleri aramak istediğimizi varsayalım. Komut şu şekilde olacaktır:
grep ':[^/]' regex
Bu, köşeli parantezin içine ilk karakter olarak "^" koymaktır. Aşağıya istediğiniz tüm karakterleri koyabilirsiniz. Bu son komutun sonucu şudur:
Arch Linux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10/2004
Şimdi dağıtım adlarının arkasındaki ":" vurgulanır, ancak URL'lerde "/" olduğu için URL'lerdekiler vurgulanmaz.
- Köşeli parantezin başına "^" karakteri koymak, köşeli parantez içindeki diğer karakterler dışındaki herhangi bir karakterle eşleşir.
Yapabileceğimiz başka bir şey de bir dizi karakter belirlemektir. Örneğin, herhangi bir sayının ardından "-" aranması şu şekilde görünür:
grep '[0-9]-' regex
Bununla, 0 ile 9 arasında bir karakter ve ardından bir eksi işareti belirliyoruz. Sonucu görelim:
ArchLinux: 11-03-2002 CentO'lar: 14-05-2004 03: 32: 38
Aralıkları tek karakterlerle bile karıştırmak için parantez içinde birden çok aralık belirtilebilir.
- Köşeli parantez içinde "-" ile ayrılmış iki karakterin yerleştirilmesi, aralık içindeki herhangi bir karakterle eşleşir.
Şimdi URL'lerin ilk bölümünü seçip seçemeyeceğimize bakalım. "Http" veya "https" yazan. Sadece son "lerde" farklılık gösterirler, o halde bunu şu şekilde yapalım:
grep -E 'https?' regex
Soru işareti, solundaki karakteri isteğe bağlı yapmak için kullanılır. Ama şimdi komuta -E seçeneğini ekledik. Bunun nedeni, sorgulamanın genişletilmiş düzenli ifadelerin bir özelliği olmasıdır. Şimdiye kadar temel düzenli ifadeler kullanıyorduk, bu yüzden herhangi bir şey koymaya gerek yoktu. Sonucu görelim:
Arch Linux: https: //wiki.archlinux.org/ Gentoo: https: //wiki.gentoo.org/wiki/Main_Page CentOS: http: //wiki.centos.org/ Debian: https: //wiki.debian.org/ Ubuntu: https: //wiki.ubuntu.com/
Yani zaten yeni bir kuralımız var:
- Bir karakter ve ardından "?" bu karakterle eşleşir veya hiçbiriyle eşleşmez. Bu yalnızca genişletilmiş normal ifadeler için geçerlidir.
Şimdi tamamen farklı iki kelimeyi arayacağız. Hem "Debian" hem de "Ubuntu" kelimesini içeren satırları nasıl bulacağımızı görelim.
grep -E 'Debian|Ubuntu' regex
Dikey çubukla iki veya daha fazla farklı normal ifadeyi ayırabilir ve bunlardan herhangi birine uyan satırları bulabiliriz:
Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ Debian: 16 / 08 / 1993 Ubuntu: 20 / 10 / 2004
- «|» Karakteri birkaç normal ifadeyi ve bunlardan herhangi biriyle eşleşmeyi ayırmaya yarar. Ayrıca genişletilmiş normal ifadelere özeldir.
Devam edelim. Şimdi "Linux" kelimesini arayacağız, ama sadece soldaki başka bir kelimeye yapışık olmadığı yerde. Bunu şu şekilde yapabiliriz:
grep '\
Buradaki önemli karakter "<" dir, ancak grep'in onu özel bir karakter olarak yorumlaması için önüne "\" koyarak kaçılması gerekir. Sonuç aşağıdaki gibidir:
Kemer Linux: 11-03-2002 Gönderen Linux Rulez.
Ayrıca yan yana gelmeyen sözcükleri aramak için "\>" kullanabilirsiniz. Bir örnekle gidelim. Şu komutu deneyelim:
grep 'http\>' regex
Ürettiği çıktı şudur:
CentOS: http: //wiki.centos.org/
"Http" çıktı, ancak "https" değil, çünkü "https" de hala "p" nin sağında bir kelimenin parçası olabilecek bir karakter var.
- "<" Ve ">" karakterleri, sırasıyla bir kelimenin başlangıcı ve sonuyla eşleşir. Değişmez karakterler olarak yorumlanmamaları için bu karakterlerin öncelenmesi gerekir.
İşleri biraz daha karmaşık hale getiriyoruz. "+" Karakteri solundaki karakterle eşleşir ve en az bir kez tekrarlanır. Bu karakter yalnızca genişletilmiş normal ifadelerle kullanılabilir. Bununla, örneğin, ":" ile başlayan bir satırda birkaç sayı dizisini arayabiliriz.
grep -E ':[0-9]+' regex
Sonuç:
CentO'lar: 14-05-2004 03: 32: 38
38 rakamı da vurgulanır çünkü ":" ile başlar.
- "+" Karakteri solundaki karakterle eşleşir ve en az bir kez tekrarlanır.
"{" Ve "}" kullanarak tekrar sayısını da kontrol edebilirsiniz. Buradaki fikir, parantez içine, istediğimiz tam tekrar sayısını gösteren bir sayı koymaktır. Ayrıca bir aralık da koyabilirsiniz. İki durumun örneklerini görelim.
Önce, var olan tüm dört basamaklı dizileri bulacağız:
grep '[0-9]\{4\}' regex
Temel normal ifadeler kullanıyorsak, genişletilmiş ifadeler kullanıyorsak küme parantezlerinden kaçınılması gerektiğine dikkat edin. Uzatıldığında şöyle olur:
grep -E '[0-9]{4}' regex
Ve her iki durumda da sonuç şu olur:
ArchLinux: 11-03-2002 Gentoo: 31/03 /2002 CentO'lar: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10 /2004
- Aralarında bir sayı bulunan "{" ve "}" karakterleri, belirtilen sayıda yinelenen önceki karakterle eşleşir.
Şimdi parantezli diğer örnek. 3 ile 6 arasında küçük harf içeren kelimeleri bulmak istediğimizi varsayalım. Aşağıdakileri yapabiliriz:
grep '[a-z]\{3,6\}' regex
Ve sonuç şu olur:
- Lista de Páginas wiki: TORCHLgiriş: https: //wiki.Arch Linux.org/ GEntoo: https: //wiki.gentoo.org/wiki/Main_Pyaş CentOS: http: //wiki.CentOS.org/ DEbian: https: //wiki.debian.org/ VEYABuntu: https: //wiki.ubuntu.com/ - Fözledin de Yayın: TORCH Lgiriş: 11-03-2002 GEntoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 DEbian: 16/08/1993 UBuntu: 20/10/2004 DBu Lgiriş Rülez.
Gördüğünüz gibi, istediğimiz şeye pek benzemiyor. Bunun nedeni, normal ifadenin daha uzun olan diğer kelimelerin içindeki harfleri bulmasıdır. Şu diğer versiyonu deneyelim:
grep '\<[a-z]\{3,6\}\>' regex
Sonuç:
- Sayfaların listesi wiki: ArchLinux: https: //wiki.archlinux.org/ Gentoo: https: //wiki.gentoo.org/wiki/ Main_Page CentOS: http: //wiki.CentOS.org/ Debian: https: //wiki.debian.org/ Ubuntu: https: //wiki.ubuntu.com/
Bu zaten istediğimiz şeye daha çok benziyor. Yaptığımız şey, kelimenin ilk harften hemen önce başlamasını ve sondan hemen sonra bitmesini gerektirdi.
- Aralarında virgülle ayrılmış iki sayı bulunan "{" ve "}" karakterleri, iki sayı ile belirtilen sayıda yinelenen önceki karakterle eşleşir.
Şimdi "+" nın asal olan bir karaktere bakalım. Bu "*" dir ve çalışması yalnızca sıfır dahil herhangi bir sayıda karakterle eşleştiği için çok benzer. Yani, "+" ile aynı şeyi yapar ancak solundaki karakterin metinde görünmesini gerektirmez. Örneğin, wiki'de başlayıp org ile biten adresleri aramayı deneyelim:
grep 'wiki.*org' regex
Sonucu görelim:
ArchLinux: https: //wiki.archlinux.org/ Gentoo: https: //wiki.gentoo.org/ wiki / Main_Page CentOS: http: //wiki.centos.org/ Debian: https: //wiki.debian.org/
Mükemmel.
Şimdi göreceğimiz son karakter. "\" Karakteri, özel anlamını yitirmesi için karakterden sağa kaçmak için kullanılır. Örneğin: Bir noktada biten çizgileri bulmak istediğimizi varsayalım. Aklımıza gelebilecek ilk şey şu olabilir:
grep '.$' regex
Sonuç, aradığımız şey değil:
- wiki sayfalarının listesi: ArchLinux: https://wiki.archlinux.org/ Gentoo: https://wiki.gentoo.org/wiki/Main_Page CentOS: http://wiki.centos.org/ Debian: https://wiki.debian.org/ Ubuntu: https://wiki.ubuntu.com/ - Yayın tarihleri: Arch Linux: 11-03-2002 Gentoo: 31/03/2002 CentOs: 14-05-2004 03:32:38 Debian: 16/08/1993 Ubuntu: 20/10/2004 Desde Linux Kurallar.
Bunun nedeni "." herhangi bir şeyle eşleşir, böylece normal ifade her satırın son karakteriyle eşleşir. Çözüm şudur:
grep '\.$' regex
Şimdi sonuç, istediğimiz şey:
Desde Linux Kurallar.
Oyun bitti
Düzenli ifadeler konusu bir dizi makale için vereceğim kadar karmaşık olsa da, sanırım size zaten yeterince acı verdim. Gelmeyi başardıysanız, tebrikler. Tüm bunları bir oturuşta okursanız, aspirin veya başka bir şey alın çünkü bu iyi olamaz.
Şimdilik hepsi bu. Bu makaleyi beğendiyseniz, belki bir tane daha yazabilirsiniz. Bu arada, nasıl çalıştıklarını net bir şekilde görmek için terminaldeki tüm normal ifadeleri denemenizi tavsiye ederim. Unutmayın: Yalnızca Chuck Norris HTML'yi normal ifadeler kullanarak ayrıştırabilir.
Normal ifade olmadan hayatımız nasıl olurdu?
Makale çok yararlı, ancak yavaş yavaş okuyacağım. Çok teşekkürler.
Yorum için teşekkürler. Hala makalemin çıktığına inanmıyorum. 🙂 Bazı hatalarla çıktı, ama umarım yararlıdır. 🙂
Teşekkür ederimssssssss! ..
Bir süre önce normal ifadeler hakkında biraz çalışmak zorunda kaldım .. .. Öğrettiğiniz için teşekkür ederim .. ve her birini öğrenmek için adım adım kılavuz ...
Çok güzel! .. .. O aspirini alacağım .. ee
Rica ederim. Cesaret ve bu normal ifadeler seninle olamaz. 🙂
Harika gönderi! İyi iş. Acaba kaç saat sürdü 😀
LOL !! Soru şu: Söylemek istediğim her şeyi söyleseydim kaç saatimi alırdı? Sonsuz !! 🙂
bilmediğim bir şey, güzel makale!
Teşekkür ederim. Sizinle paylaşmak bir zevk.
harika bir açıklama. tebrikler! gerçekten faydalı!
Yararlı bulduğuna sevindim. Bu yüzden yazmak bir zevk
Bu özel bir yere gitmeli. Öne Çıkanlar gibi, ancak çok özel bir faydası var. Vim'e uygulandığını görmek istememe rağmen oldukça kullanışlı.
Bu kendime sormam gereken bir soru. Aklımda düzenli ifadelerle ilgili birkaç makale daha var. Ve içlerinde vim hakkında konuşabilirim. Bu makalede anlattıklarımdan bazı farklılıkları var. Devam etme meselesi. 🙂
İyi!
Makaleniz çok güzel, merak uyandırıcı, yakın zamanda (şu anda) birkaç gündür hazırlamakta olduğum, düzenli ifadeler için meta karakterlerin bir listesini ve bazı örnekleri topladığım bir girişi web sitemde yayınladım. Ve girmek adil oldu DesdeLinux ve aynı konudaki bir girişi görün!
Teselli olacaksa, benimki ÇOK DAHA KEDİ 😀
Kesinlikle regex en kullanışlı şeylerden biridir, normalde onları komutların çıktısını kırpmak ve beni ilgilendiren kısmı tutmak için kullanıyorum ve sonra bununla örneğin bir bash betiğinde etkileşime giriyorum. Bunları üniversitede de çok kullandım ve derleyicilerin oluşturulmasında hayati öneme sahipler (sözlükbilim ve ayrıştırıcı tanımında). Kısacası, bütün bir dünya.
Selamlar ve çok çok iyi iş.
Çok teşekkür ederim.
Makaleni de beğendim. Benimkinden daha özlü. Hızlı bir referans olarak hizmet edebilir. Bunları aynı anda yazmış olmamız bir tesadüf. İnsanların konuyla ilgilendiğini görebilirsiniz. 🙂
Aptallar için normal ifadeler =), şimdi benim için daha açık, çünkü grep için renk ile çıktı elde etmenin bir yolu .bashrc takma adında grep = 'grep –color = her zaman' bir takma ad oluşturmaktır. .
selamlar
Doğru. Bunu yapmanın başka bir yolu bu. Giriş için teşekkürler. 🙂
O_O… katkı payı !!! O_O ...
Gönderi için çok teşekkür ederim, bir süre böyle bir şey bekliyordum lol, lol'e konsantre olmak için sıfır güçlükle evde sakince okumak için açık bırakıyorum.
Yazı için teşekkürler, gerçekten yapıyorum 😀
Hoşuna gideceğini biliyordum. LOL !! Gerçek şu ki, birçok şey eksik, ama aklımda zaten ikinci bir bölüm var. 🙂
Harika makale, keşke dün okumuş olsaydım, bugün verdiğim ders öğrencilerim için daha da kolay olurdu!
LOL !! Ne yazık ki geç kaldım, ama işe yaradığına sevindim. 🙂
Son olarak !!!, gönderi süper güzel… Nihayet normal ifadeleri net bir şekilde açıklayan bir şey buldum… ..
Dışarıda çok fazla bilgi var, ancak anlaşılması kolay bir şey bulmak daha zor. Bu boşluğu doldurduğuma sevindim. 🙂
Selamlar.
Hey yardıma ihtiyacım var, / var / logs içinde şu formatta bir arama yapmalıyım: yymmdd ve günlükler 130901.log -130901.log gibi geliyor, 1 Eylül - 11 Ekim arası olanların hepsini aramam gerekiyor, Yapmayı başardığım tek şey, Eylül ayının tamamını kaldırmaktı, ancak tüm zinciri nasıl yapacağımı bilmiyorum:
ör: 1309 [0-3] 1 Eylül - 30 Eylül arasındaki günlükleri bana döndürüyor, ancak 1 - 11 Ekim arasında aynı zincire nasıl gireceğimi de bilmiyorum.
Bunu normal ifadeler kullanarak yapmak biraz karmaşıktır. Bana böyle bir şeyin işe yarayabileceği anlaşılıyor:
13(09[0-3]|10(0|1[01]))
Genişletilmiş bir düzenli ifadedir. Hangi aracı kullandığınızı söylemiyorsunuz, bu yüzden size daha fazla ayrıntı veremem.
Her neyse, bence normal ifadeler kullanmak yerine durum budur, bul ile yapmak daha iyidir. Bunun gibi bir şey deneyebilirsiniz:
bul. -newermt '01 Eylül '-a! -newermt '11 oct '-baskı
Şans. Umarım bu size yardımcı olabilir.
Merhaba! Öncelikle çalışmanız için teşekkür etmek istedim, çünkü bu sayfa en iyi Linux siteleri arasında "ilk 3" içinde yer alıyor.
Pratik yapıyordum ve bir telefon numarasındaki bir RegExp'in benim için neden işe yaramadığını bilmiyordum ve "-E" eksikti (bu yazı sayesinde fark ettim).
RegExp'te alıştırmaların olduğu iyi bir pdf veya site bilmediğinizi sormak istedim, ancak biraz hayal gücünüzle bunları kendiniz icat etmeye çalışabilirsiniz.
Selamlar, Pablo.
Çok güzel, hepsini okudum ve evet şimdi bir aspirine ihtiyacım var 🙂
Normal ifadelerin gördüğüm en iyi açıklaması. Yazara bu eseri paylaştığı için teşekkür ederim.
Bir tebrik.
Gerçekten çok iyi bir açıklamayı beğendim