Farklı araçlar ve sürümleri, normal ifadelerin farklı biçimlerini destekler. Her birinin belgeleri size neyi desteklediklerini söyleyecektir.
Standartlar mevcuttur, böylece tüm uygun uygulamalarda mevcut olan minimum özellik setine güvenilebilir.
Örneğin, POSIX tarafından belirtilen temel düzenli ifadelerin tüm modern uygulamaları sedve grepuygulaması (en azından bir versiyon veya standardın diğer, ancak bu standart son birkaç on yılda bu konuda çok fazla gelişme sağlamamıştır).
POSIX BRE ve ERE'de [:alnum:]karakter sınıfınız vardır. Bu, yerel ayarınızdaki harf ve rakamlarla eşleşir ( a-zA-Z0-9yerel ayar C olmadığından çok daha fazlasını içerdiğini unutmayın ).
Yani:
grep -x '[[:alnum:]_]\{1,\}'
bir veya daha fazla şapla eşleşir veya _.
[\w]POSIX tarafından gerekli ya ters eğik çizgi maç veya w. Dolayısıyla, uygun olan yerlerde bir uygulama grepveya seduygulama bulamazsınız (standart olmayan seçenekler olmadan).
\wYalnız için davranış POSIX tarafından belirtilmez, bu nedenle uygulamaların istediklerini yapmalarına izin verilir. GNU grepbunu uzun zaman önce ekledi.
GNU grepkendi regexp motoruna sahipti, ancak şimdi GNU libc'sini kullanıyor (kendi kopyasını yerleştirmesine rağmen).
Yerel ayarlarınızda alnumlarla eşleşmek ve alt çizgi çizmek içindir. Bununla birlikte, şu anda yalnızca tek baytlık karakterlerle eşleşmesi gibi bir hatadır (örneğin, açıkça bir mektup olmasına rağmen é'nin tek olduğu tüm yerlerde é ile eşleşmesine rağmen, é bir UTF-8 yerel ayarında değil) karakter).
Ayrıca \wperge regexp ve PCRE de bir regexp operatörü var. PCRE / perl POSIX normal ifadeleri değildir, hepsi bir arada başka bir şeydir.
Şimdi, GNU grep -PPCRE’yi kullanma yöntemiyle , bununla aynı sorunu çözdü -P. Kullanarak (*UCP)(bu UTF8 dışındaki yerlerde de yan etkileri de olsa) kullanarak da çalışabilir .
GNU sedayrıca GNU libc'nin regex'lerini kendi regexps'leri için kullanır. GNU ile aynı böceğe sahip olmamasına rağmen onu öyle kullanıyor grep.
GNU sedPCRE'leri desteklemiyor. Kodunda daha önce denenmiş olduğuna dair bazı kanıtlar var, ancak artık gündemde görünmüyor.
Perl'in düzenli ifadelerini istiyorsanız, sadece kullanın perl.
Aksi taktirde, sizin sed/ uygulamanızın standart dışı bir özelliğine bağlı olan sahte bir özelliğe güvenmek yerine, standarda uymanın grepve kullanmanın daha iyi olacağını söyleyebilirim [_[:alnum:]].
[_[:alnum:]][\w/]([_[:alnum:]/]bu durumda) olduğu gibi genişletmeme izin veren güzel bir çözüm .