2014-09-29 16 views
5

Ho creato un test utilizzando grep ma non funziona in sed.Il lookbehind funziona in sed?

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

Questo funziona correttamente restituendo bar.

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

mi aspettavo footest come output, ma non ha funzionato.

+4

sed non supporta affermazioni Lookaround. – hwnd

risposta

9

GNU sed non supporta le asserzioni di ricerca. Potresti usare un linguaggio più potente come Perl o possibilmente sperimentare con ssed che supporta le espressioni regolari in stile Perl.

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

Il testo che accompagna la tua soluzione non ha senso dal momento che Perl non supporta PCRE (almeno non in modo nativo). – ikegami

9

nota che la maggior parte del tempo si può evitare un lookbehind (o un lookahead) con un gruppo di cattura e un backreference nella stringa di sostituzione:

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