Neden sed varsayılan olarak genişletilmiş normal ifade modunu kullanmıyor?


10

Sed kullanıyorum. Görebildiğim kadar doğru bir regex kullanıyordum, ama sed hiçbir şey yapmadı. \s+Hangi sed'in anlayamadığını kullandığım ortaya çıktı ve geçiş yaptığımda [ ]+işe yaradı.

Özetle, çalışmak için hemen hemen her şeyden kaçmak ve \sboşluk için kaldırmak zorunda olduğum bir normal ifade yaptım . Tüm bunlardan kaçınmak için bir mod var gibi görünüyor -rYani sormak istedim:

  1. -rSed için varsayılan mod neden olmasın ? Neden her şeyden kaçmak için bu kadar çok beladan gitmek zorunda kaldım?
  2. manseçeneğin olduğunu --posixve "POSIX.2 BRE'lerin desteklenmesi gerektiğini" söylüyor. Bu ne anlama geliyor? NFA / DFA modu?

Bir kenara, perl'in BRE ve aynı veya ERE'deki \s+kullanımı gibi boşlukları eşleştirmek [[:space:]][:space:]]*için [[:space:]]+.
jrm

Yanıtlar:


10

Re 1) Cevap, onlarca yıldır geliştirilen diğer araçlarla aynıdır. :)

Varsayılan davranışı değiştirerek mevcut komut dosyalarını kırmak istemezsiniz.

Re 2) Bunun eşleşen motorla ilgisi yoktur; sadece hangi düzenli ifadeler kümesinin desteklendiği bir sorudur. POSIX BRE "temel düzenli ifade" anlamına gelir.


(2) noktası ne olacak?
Jim

Düzenleme yardımcı oluyor mu?
tink

1

2. nokta ile ilgili olarak: varsayılan olarak gnu sedGNU kullanır BRE. POSIX kullanmak için BREşunları belirtmelisiniz--posix

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.