sed나 Perl에 vim의 \zs와 동등한 기능이 있나요?

sed나 Perl에 vim의 \zs와 동등한 기능이 있나요?

vim에서는 \zs원자를 사용하여 "정말로 여기서부터 경주가 시작됩니다"라고 말할 수 있습니다.

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

sed나 Perl에 상응하는 것이 있나요?

답변1

Perl(및 PCRE)에서는 다음과 같이 달성할 수 있습니다.폭이 0인 검토:

(?<=funnyword).*$

"funnyword"와 일치하지만 일치 항목에 포함되지 않습니다. 이는 backview의 고정 길이 텍스트에만 적용됩니다. (?<!...)일부 텍스트가 존재하지 않음을 지정하기 위해 음의 뒤돌아보기( )를 사용할 수도 있습니다 .

Perl의 최신 버전에서는\K거의 완전한 교체\zs당신이 그것을 사용할 때:

funnyword\K.*$

\K지금까지 일치된 모든 항목을 삭제하고 그 시점부터 일치를 계속합니다. 앞부분은 \K고정된 길이일 필요는 없습니다. 이것은현재 PCRE에도 있습니다, 그러나 버전이 무엇인지 잘 모르겠습니다.

\ze(?=...)이는 .that 패턴을 사용하여 너비가 0인 미리보기로 달성할 수 있습니다.아니요고정된 길이여야 합니다.


sed가 사용하기 때문에POSIX BRE,둘러보지 않고. 하지만 이 경우에는 일반 캡처 그룹을 사용하여 상당히 쉽게 시뮬레이션할 수 있습니다.

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

긍정적인 전망을 가지고 같은 일을 할 수 있습니다. 더 복잡한 요구 사항이 있는 경우 Perl이나 다른 접근 방식을 고려할 수 있습니다.

관련 정보