sed 또는 perl에 vim의 \ z에 해당하는 것이 있습니까?


11

vim에서 \zs원자를 사용하여 "정말로 바로 시작하십시오"라고 말할 수 있습니다 .

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

sed 또는 perl에 해당하는 것이 있습니까?

답변:


15

Perl (및 PCRE)에서는 너비0 인 lookbehind 를 통해 달성 할 수 있습니다 .

(?<=funnyword).*$

"funnyword"와 일치하지만 일치의 일부로 소비하지 않습니다. 이것들은 lookbehind의 고정 길이 텍스트에서만 작동합니다. 부정적인 lookbehinds ( (?<!...))를 사용하여 일부 텍스트가 존재하지 않도록 지정할 수도 있습니다 .

합리적으로 최신 버전의 Perl을 사용하는 \K경우 거의 동일한\zs 버전을 사용합니다.

funnyword\K.*$

\K지금까지 일치 한 모든 것을 버리고 그 시점부터 계속 일치합니다. 이전 부분 \K은 고정 길이 일 필요는 없습니다. 이것은 현재 PCRE에도 있지만 어떤 버전인지 확실하지 않습니다.

\ze대신 너비가 0 인 lookahead를 사용하여 달성 할 수 있습니다 (?=...). 이 패턴 고정 길이 일 필요 는 없습니다 .


나오지도 사용이 때문에 BREs를 POSIX , 더 lookaround이 없습니다 . 그러나이 경우 일반적인 캡처 그룹을 사용하여이를 쉽게 시뮬레이션 할 수 있습니다.

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

긍정적 인 예견을 위해 동일한 작업을 수행 할 수 있습니다. 더 복잡한 요구 사항이 있으면 Perl 또는 다른 방법을 찾아야 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.