Vimでは、\zs
atomを使用して、「本当にここから試合を開始する」と言うことができます。
:%s/funnyword\zs.*$/otherword/
Sedまたはperlに相当するものはありますか?
Perl(およびPCRE)では、これは ゼロ幅ルックビハインド で実現可能です。
(?<=funnyword).*$
これは「funnyword」と一致しますが、一致の一部としては消費しません。これらは、後読みの固定長テキストでのみ機能します。ネガティブルックビハインド((?<!...)
)を使用して、一部のテキストが存在しないことを指定することもできます。
かなり最近のバージョンのPerlでは、 \K
は、使用している\zs
のほぼ正確な代替です。
funnyword\K.*$
\K
は、これまでに一致したものをすべて破棄しますが、その時点から引き続き一致します。 \K
の前の部分は固定長である必要はありません。これは 現在PCREでも ですが、どのバージョンで提供されたかはわかりません。
\ze
は、代わりに(?=...)
を使用して、幅ゼロの先読みで実現できます。そのパターンは固定長である必要はありません。
Sedは POSIX BRE を使用するため、 ルックアラウンドはありません 。ただし、この場合、通常のキャプチャグループを使用してかなり簡単にシミュレートできます。
sed -e 's/\(funnyword\).*$/\1otherword/'
ポジティブな先読みについても同じことができます。本当にもっと複雑な要件がある場合は、Perlまたは他のアプローチに目を向ける必要があるかもしれません。