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ı sed
ve grep
uygulaması (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-9
yerel 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 grep
veya sed
uygulama bulamazsınız (standart olmayan seçenekler olmadan).
\w
Yalnız için davranış POSIX tarafından belirtilmez, bu nedenle uygulamaların istediklerini yapmalarına izin verilir. GNU grep
bunu uzun zaman önce ekledi.
GNU grep
kendi 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 \w
perge 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 -P
PCRE’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 sed
ayrı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 sed
PCRE'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 grep
ve 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 .