2014-09-29 13 views
5

Utworzono test przy użyciu grep, ale nie działa on w wersji sed.Czy lookbehind działa w sed?

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

To działa poprawnie, po powrocie bar.

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

Spodziewałem się footest jako wyniku, ale nie działało.

+4

sed nie obsługuje lookaround twierdzeń. – hwnd

Odpowiedz

9

GNU sed nie ma wsparcia dla asercji lookaround. Możesz użyć bardziej zaawansowanego języka, takiego jak Perl lub eksperymentować z ssed, który obsługuje wyrażenia regularne w stylu Perla.

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

Tekst towarzyszący Twojemu rozwiązaniu nie ma sensu, ponieważ Perl nie obsługuje PCRE (przynajmniej nie w sposób natywny). – ikegami

9

Należy zauważyć, że w większości przypadków można uniknąć lookbehind (lub uprzedzona) przy użyciu grupę przechwytywania i wstecznych w ciągu zastępowania:

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