다음과 같은 긴 목록이 있습니다.
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[^ ]*\)//'