bash에 대한 정규식 sed를 탈출합니다(소문자 1개, 대문자 1개, 기호 1개, 숫자 1개).

bash에 대한 정규식 sed를 탈출합니다(소문자 1개, 대문자 1개, 기호 1개, 숫자 1개).

목표는 대문자 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 버전에서는 표준이 될 예정입니다). 또는 정규 표현식에서 사용 중인 미리보기 기능이 지원되지 않습니다 .BREEREBREERE(?=...)

요청을 제출하세요:

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}}}'

관련 정보