2014-09-29 22 views
5

grep kullanarak bir test oluşturdum, ancak sed'da çalışmıyor.Lookbehind sed içinde mi çalışıyor?

grep -P '(?<=foo)bar' file.txt 

Bu, bar dönerek doğru şekilde çalışır.

sed 's/(?<=foo)bar/test/g' file.txt 

Ben çıktı olarak footest bekliyordum, ama işe yaramadı.

+4

etrafa bakma iddialarını desteklememektedir. – hwnd

cevap

9

GNU sed, arama sonuçları için destek içermiyor. Perl gibi daha güçlü bir dil kullanabilir veya Perl stili normal ifadeleri destekleyen ssed ile deney yapabilirsiniz. çoğu zaman bir yakalama grubu ve yedek dizesinde bir geribaşvuru kullanarak Geriye İlerleme (veya lookahead) önleyebilirsiniz

perl -pe 's/(?<=foo)bar/test/g' file.txt 
+0

Perl'in PCRE'yi desteklemediğinden (en azından doğal olarak değil), çözümünüze eşlik eden metin oldukça mantıklı değil. – ikegami

9

Not: sed

sed 's/\(foo\)bar/\1test/g' file.txt