sedやPerlにvimの\ zsと同等の機能がありますか?

sedやPerlにvimの\ zsと同等の機能がありますか?

vimでは、\zs原子を使って「本当にここからレースが始まります」と言うことができます。

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

sedやPerlに対応するものはありますか?

ベストアンサー1

Perl(およびPCRE)では、次のように達成できます。幅0のレビュー:

(?<=funnyword).*$

「funnyword」と一致しますが、一致に含まれません。これは、バックビューの固定長テキストにのみ適用されます。(?<!...)一部のテキストが存在しないことを指定するには、負の反転()を使用することもできます。

Perlの最新バージョンでは\Kほぼ完全な交換\zsあなたがそれを使うとき:

funnyword\K.*$

\Kこれまでに一致したすべてのアイテムを削除し、その時点から一致を続けます。前部は\K固定長である必要はありません。これは現在PCREにもありますしかし、バージョンが何であるかよくわかりません。

\ze(?=...)これは、.thatパターンを使用して幅0のプレビューで達成できます。いいえ固定長でなければなりません。


sedが使うからPOSIX BRE見回すことなく。ただし、この場合は通常のキャプチャグループを使用してかなり簡単にシミュレートできます。

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

肯定的な見通しを持って同じことをすることができます。より複雑な要件がある場合は、Perlまたは他のアプローチを検討できます。

おすすめ記事