回答:
Perl(およびPCRE)では、幅ゼロの後読みでこれを実現できます。
(?<=funnyword).*$
これは「funnyword」に一致しますが、一致の一部として消費しません。これらは、後読みの固定長テキストでのみ機能します。否定的な後読み((?<!...)
)を使用して、テキストがないことを指定することもできます。
Perlのかなり最近のバージョンでは、それを使用している\K
ため\zs
、ほぼ完全に代用できます。
funnyword\K.*$
\K
これまでに一致したものはすべて破棄されますが、その時点以降は一致し続けます。前の部分\K
は固定長である必要はありません。これは現在PCREにも含まれていますが、どのバージョンが提供されたかはわかりません。
\ze
代わりに、を使用してゼロ幅先読みで実現できます(?=...)
。そのパターンは固定長である必要はありません。
sedはPOSIX BREを使用するため、回避策はありません。ただし、この場合は、通常のキャプチャグループを使用してかなり簡単にシミュレーションできます。
sed -e 's/\(funnyword\).*$/\1otherword/'
肯定的な先読みについても同じことができます。本当にもっと複雑な要件がある場合は、Perlまたはその他のアプローチを検討する必要があるかもしれません。