Hayır, sed regex'lerinin açgözlü olmayan eşleşmesi yoktur.
Sen ilk geçtiği tüm metni eşleşebilir AC
“içermeyen bir şey kullanarak AC
takip” AC
Perl en aynıdır yapar .*?AC
. Mesele şu ki, “içermeyen herhangi bir şey AC
” düzenli bir ifade olarak kolayca ifade edilemez: her zaman düzenli bir ifadenin olumsuzlanmasını tanıyan düzenli bir ifade vardır, fakat olumsuzluk düzenli ifadesi hızla karmaşıklaşır. Ve taşınabilir sed'de bu mümkün değildir, çünkü olumsuzluk normal ifadesi genişletilmiş düzenli ifadelerde (örn. Awk) mevcut olan ancak taşınabilir temel düzenli ifadelerde olmayan bir değişimin gruplandırılmasını gerektirir. GNU sed gibi bazı sed sürümlerinde, BRE'nin mümkün olan tüm düzenli ifadeleri ifade etmesini sağlayan uzantılar vardır.
sed 's/AB\([^A]*\|A[^C]\)*A*AC/XXX/'
Normal ifadeyi reddetmenin zorluğu nedeniyle, bu iyi bir genelleme değildir. Bunun yerine çizgiyi geçici olarak dönüştürmektir. Bazı sed uygulamalarında, yeni satırları işaretleyici olarak kullanabilirsiniz, çünkü bunlar bir giriş satırında görünemezler (ve birden çok işaretçiye ihtiyacınız varsa, yeni satırı ve ardından değişen bir karakteri kullanın).
sed -e 's/AC/\
&/g' -e 's/AB[^\
]*\nAC/XXX/' -e 's/\n//g'
Ancak, ters eğik çizgi yeni satırının bazı sed sürümleriyle karakter setinde çalışmadığına dikkat edin. Özellikle bu, gömülü olmayan Linux üzerinde sed uygulaması olan GNU sed'de çalışmaz; GNU sed'de \n
bunun yerine şunları kullanabilirsiniz :
sed -e 's/AC/\
&/g' -e 's/AB[^\n]*\nAC/XXX/' -e 's/\n//g'
Bu özel durumda, AC
birinciyi bir satırsonu ile değiştirmek yeterlidir . Yukarıda sunduğum yaklaşım daha geneldir.
Sed'deki daha güçlü bir yaklaşım, çizgiyi tutma alanına kaydetmek, çizginin ilk “ilginç” kısmı hariç tümünü kaldırmak, tutma alanını ve desen alanını değiştirmek veya desen alanını tutma alanına eklemek ve tekrarlamaktır. Ancak, bu kadar karmaşık şeyler yapmaya başlarsanız, gerçekten awk'a geçmeyi düşünmelisiniz. Awk'ın da açgözlü olmayan eşleşmesi yoktur, ancak bir dizeyi bölebilir ve parçaları değişkenlere kaydedebilirsiniz.