Sed를 사용하여 잘못된 도메인 이름 제거

Sed를 사용하여 잘못된 도메인 이름 제거

다음을 수행하는 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를 사용한 도메인 이름 검증또는정규식 일치 기본 도메인 이름.

관련 정보