Em Perl (e PCRE) isso é possível com um lookbehind de largura zero :
(?<=funnyword).*$
que corresponde a "funnyword", mas não o consome como parte do jogo. Estes só funcionam com texto de comprimento fixo no lookbehind. Você também pode usar lookbehinds negativos ( (?<!...)
) para especificar que algum texto não está lá.
Em qualquer versão razoavelmente recente do Perl, \K
é quase um substituto exato para \zs
conforme você está usando:
funnyword\K.*$
\K
descarta tudo que foi correspondido até o momento, mas continua correspondendo a partir desse ponto. A parte antes de \K
não precisa ser de comprimento fixo. Isso é também no PCRE agora , mas não tenho certeza de qual versão ele veio .
\ze
pode ser obtido com uma lookahead de largura zero, usando (?=...)
. Esse padrão não precisa ser de tamanho fixo.
Como o sed usa BREs POSIX , não há nenhuma referência . Neste caso, você pode facilmente simular usando um grupo de captura comum:
sed -e 's/\(funnyword\).*$/otherword/'
Você pode fazer o mesmo para uma visão positiva. Se você realmente tem um requisito mais complicado, talvez tenha que procurar Perl ou alguma outra abordagem.