다음을 수행하는 sed 명령을 작성하는 데 문제가 있습니다. "유효한" 도메인 이름만 포함해야 하는 파일이 있습니다. 표현식과 일치하지 않는 줄을 제거하기 위해 sed와 함께 어떻게 사용합니까?
다음은 내가 사용한 온라인 도구에 유지하고 싶은 줄과 일치하는 것 같지만 더 잘 작성될 수 있다고 확신합니다.
^*.*[a-zA-Z0-9][a-zA-Z0-9-]+\.[a-zA-Z]{2,15}?$
파일
example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example
example.example.co.uk
(example)
example.photography
example.info
example/
example.
example</h1>
{example}
etc.
예상 출력:
example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example.example.co.uk
example.photography
example.info
도와 주셔서 감사합니다.
답변1
정규식을 유효하게 만들기 위해 수정해야 했지만 이 sed 명령은 일치하는 줄만 인쇄합니다.
$ sed -nr '/[.].*[a-zA-Z0-9][a-zA-Z0-9-]+([.][a-zA-Z]{2,15})?$/p' file
example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example.example.co.uk
example.photography
example.info
작동 원리
-n
이는 명시적으로 요청하지 않는 한 sed에게 줄을 인쇄하지 않도록 지시합니다.
-r
이는 sed에게 확장 정규식을 사용하도록 지시합니다.
/[.].*[a-zA-Z0-9][a-zA-Z0-9-]+([.][a-zA-Z]{2,15})?$/p
/.../
정규식과 일치하는 줄을 선택하고/.../p
정규식과 일치하는 줄을 인쇄하도록 sed에 지시합니다.
정규식 변경 사항
이는 ^*
정규식을 시작하는 유효한 방법이 아닙니다. ^
줄의 시작 부분과 일치하고 *
0개 이상의 선행 문자와 일치하지만 선행 문자는 제공되지 않습니다. 이는 에서와 같이 마침표를 추가하여 유효하게 만들 수 있습니다 ^.*
. 이는 무엇이든 시작하는 줄과 일치합니다. 하지만 여기서는 도움이 되지 않기 때문에 삭제했습니다.
그리고 마침표로 끝나는 줄을 제외시키려는 것 같아서 \.[a-zA-Z]{2,15}?$
로 변경했습니다 ([.][a-zA-Z]{2,15})?$
.
도메인 이름과 일치하는 정규식을 만들려는 다른 사람들의 시도는 다음을 참조하세요.RegEx를 사용한 도메인 이름 검증또는정규식 일치 기본 도메인 이름.