Risposte:
In Perl (e PCRE) questo è possibile con un lookbehind di larghezza zero :
(?<=funnyword).*$
che corrisponde a "parola divertente", ma non lo consuma come parte della partita. Funzionano solo con testo a lunghezza fissa nel lookbehind. Puoi anche usare lookbehinds negativi ( (?<!...)
) per specificare che parte del testo non c'è.
In qualsiasi versione abbastanza recente di Perl, \K
è quasi un sostituto esatto per\zs
come lo stai usando:
funnyword\K.*$
\K
scarta tutto ciò che corrisponde finora, ma continua a corrispondere da quel punto in poi. La parte prima \K
non deve essere di lunghezza fissa. Anche questo è in PCRE ora , ma non sono sicuro di quale versione sia arrivata.
\ze
può essere invece ottenuto con un lookahead a larghezza zero, usando (?=...)
. Quel modello non ha bisogno di essere a lunghezza fissa.
Poiché sed utilizza POSIX BREs , non esiste alcuna soluzione . In questo caso, tuttavia, puoi simularlo abbastanza facilmente usando un normale gruppo di acquisizione:
sed -e 's/\(funnyword\).*$/\1otherword/'
Puoi fare lo stesso per lookahead positivo. Se hai davvero un requisito più complicato, potresti dover guardare a Perl o qualche altro approccio.