sedまたはperlのvimの\ zsに相当するものはありますか?


11

vimでは、\zsアトムを使用して、「ここから試合を本当に始めましょう」と言うことができます。

:%s/funnyword\zs.*$/otherword/

sedまたはperlに相当するものはありますか?

回答:


15

Perl(およびPCRE)では、幅ゼロの後読みでこれを実現できます

(?<=funnyword).*$

これは「funnyword」に一致しますが、一致の一部として消費しません。これらは、後読みの固定長テキストでのみ機能します。否定的な後読み((?<!...))を使用して、テキストがないことを指定することもできます。

Perlのかなり最近のバージョンでは、それを使用している\Kため\zsほぼ完全に代用できます。

funnyword\K.*$

\Kこれまでに一致したものはすべて破棄されますが、その時点以降は一致し続けます。前の部分\Kは固定長である必要はありません。これは現在PCREにも含まれていますが、どのバージョンが提供されたかはわかりません。

\ze代わりに、を使用してゼロ幅先読みで実現できます(?=...)。そのパターン固定長である必要ありません


sedはPOSIX BREを使用するため、回避策ありません。ただし、この場合は、通常のキャプチャグループを使用してかなり簡単にシミュレーションできます。

sed -e 's/\(funnyword\).*$/\1otherword/'

肯定的な先読みについても同じことができます。本当にもっと複雑な要件がある場合は、Perlまたはその他のアプローチを検討する必要があるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.