W vimie możemy użyć \zs
atomu, aby powiedzieć „naprawdę rozpocznij mecz właśnie tutaj”:
:%s/funnyword\zs.*$/otherword/
Czy istnieje odpowiednik sed, a nawet perla?
źródło
W vimie możemy użyć \zs
atomu, aby powiedzieć „naprawdę rozpocznij mecz właśnie tutaj”:
:%s/funnyword\zs.*$/otherword/
Czy istnieje odpowiednik sed, a nawet perla?
W Perlu (i PCRE) można to osiągnąć za pomocą wyglądu zerowej szerokości :
(?<=funnyword).*$
który pasuje do „zabawnego słowa”, ale nie zużywa go jako części dopasowania. Działają one tylko z tekstem o stałej długości w lookbehind. Możesz także użyć ujemnego lookbehinds ( (?<!...)
), aby określić, że nie ma tam jakiegoś tekstu.
W każdej dość aktualnej wersji Perla \K
jest prawie dokładnym zamiennikiem\zs
, gdy go używasz:
funnyword\K.*$
\K
odrzuca wszystko, co do tej pory pasowało, ale kontynuuje dopasowanie od tego momentu. Poprzednia część \K
nie musi mieć stałej długości. Jest to teraz także w PCRE , ale nie jestem pewien, w jakiej wersji się pojawił.
\ze
można osiągnąć za pomocą funkcji lookahead o zerowej szerokości, używając (?=...)
. Ten wzór nie musi mieć stałej długości.
Ponieważ sed używa BREIX POSIX , nie ma na to spojrzenia . W tym przypadku można jednak dość łatwo przeprowadzić symulację za pomocą zwykłej grupy przechwytywania:
sed -e 's/\(funnyword\).*$/\1otherword/'
Możesz zrobić to samo dla pozytywnego spojrzenia w przyszłość. Jeśli naprawdę masz bardziej skomplikowane wymagania, być może będziesz musiał spojrzeć na Perla lub inne podejście.