목표는 대문자 1개, 소문자 1개, 특수 문자 1개, 숫자 1개를 포함하지 않는 파일의 모든 줄을 제거하는 것입니다.
이 정규식을 실행할 수 없습니다.
(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
bash 명령에 표시된 대로:
sed -ri '\/(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$\/!d' rh.txt
오류는 다음과 같습니다.
sed: -e expression #1, char 67: unterminated address regex
무엇으로부터 도망쳐야 할지 모르겠습니다.
도움이 필요하세요?
답변1
sed
이 목적 으로 사용하지 마십시오 grep
. 이 방법으로 PCRE 스타일 표현을 사용할 수 있습니다 sed
(PCRE를 사용하지 않음).
grep -v -P '^(?=.*pattern1)(?=.*pattern2)'
답변2
슬래시를 이스케이프 처리 /
하여 /
더 이상 주소 패턴의 구분 기호가 아니기 때문에 오류가 발생합니다.
이제 escape 하지 않더라도 /
정규식은 작동하지 않습니다. 및 일부 구현에서만 sed
지원됩니다 (다음 POSIX 버전에서는 표준이 될 예정입니다). 또는 정규 표현식에서 사용 중인 미리보기 기능이 지원되지 않습니다 .BRE
ERE
BRE
ERE
(?=...)
요청을 제출하세요:
LC_ALL=C sed -e '
/[A-Z]/!d
/[a-z]/!d
/[0-9]/!d
/[#?!@$%^&*-]/!d
' <file
답변3
가능한 솔루션 사용 sed
:
sed -n '/[A-Z]/{/[a-z]/{/[0-9]/{/[#?!@$%^&*-]/p}}}'