이 전방 예측 정규식 'string.*?(?= )'이 sed에서 작동하지 않는 이유는 무엇입니까? [복사]

이 전방 예측 정규식 'string.*?(?= )'이 sed에서 작동하지 않는 이유는 무엇입니까? [복사]

다음과 같은 긴 목록이 있습니다.

AllowedUsers [email protected] [email protected] [email protected] [email protected] .....

모두 한 줄에 있습니다. 기본적으로 많은 사용자 이름@ip

사용자 이름(예: aaa)을 사용하여 찾기 및 바꾸기를 수행한 다음 무엇이든 바꾸고 싶습니다.

정규식을 테스트했습니다(정규식) 예상대로 작동합니다. 하지만 에서 이 작업을 수행하려고 하면 sed작동하지 않습니다.

$ sed 's/bbbb11.*?(?= )//' test
AllowedUsers [email protected] [email protected] [email protected] [email protected] .....

나는 또한 사용해 보았지만 bbbb11.*?(?=[[:space:]])작동하지 않았습니다.

내가 놓친 게 무엇입니까?

답변1

긍정적( ?=) 및 부정적 예측( ?!) 어설션은 지원되는 도구에서만 제대로 작동합니다.PCRE 확장. GNU sed나 POSIX 모두 이러한 라이브러리 확장을 지원하지 않습니다. perl즉시 지원이 필요합니다.

perl -pe 's/bbbb11.*?(?= )//'

또는 정규식 지원 없이도 동일한 목표를 달성할 수 있습니다. 이 간단한 교체를 위해 POSIX와 GNU 모두에서 작동하는 다음을 수행할 수 있습니다.sed

sed 's/\(bbbb11[^ ]*\)//'

관련 정보