파일에서 전체 도메인 이름을 포함하는 grep 추출 라인 [닫기]

파일에서 전체 도메인 이름을 포함하는 grep 추출 라인 [닫기]

다음 형식의 도메인 이름이 포함된 대용량 파일이 있습니다.

domain.com
sub.domain.com
sub.domain.co.uk
domain.co.uk

최상위 도메인(예: .com) 또는 국가 코드 최상위 도메인을 사용하여 기본 도메인 이름(하위 도메인 제외)을 추출하고 싶습니다.

최상위 도메인 이름은 항상 2~3자입니다(예: .com, .net, .gov).

국가 코드 최상위 도메인은 항상 2자(예: .uk, .us)이며 해당 줄 끝에 있습니다.

따라서 입력에 위 목록이 포함되어 있으면 출력은 다음을 추출해야 합니다.

domain.com
domain.co.uk

나는 다음과 같은 표현을 시도해 보았습니다.

grep -P '^[^\.]+\.[a-zA-Z]{2,3}\.[a-zA-Z]{2}$

이것이 나의 설명이다. -P:perl 정규 표현식 ^:^\.:제외 점 1개 +:이상 x 2~3개의 알파벳 문자(예: .com, .co) 줄 끝에 두 개의 알파벳 문자\.:[a-zA-Z]{2,3}:[a-zA-Z]{2}$:

내 문제: 내가 얻는 출력은 항상 추출됩니다.

domain.co.uk

하지만domain.com

domain.com국가 코드 최상위 도메인(예: 및 )이 포함되거나 포함되지 않은 정규식 추출 도메인 이름을 만들 수 있지만 domain.co.uk하위 도메인(예: sub.domain.co.uk또는 )은 제외하려면 어떻게 해야 합니까?sub.domain.com

답변1

귀하의 질문이 불분명합니다. 언급한 대로 정의된 도메인 전용 프로젝트가 있는 경우 다음을 사용하여 찾을 수 있습니다.

grep -P "^.[^.]+\.[a-zA-Z]{3}$|^.[^.]+\.[a-zA-Z]{2}\.[a-zA-Z]{2}$" FileName
  • grep -PPerl 정규 표현식 사용
  • ^.[^.]+. 다음과 같은 수의 문자를 제외한 모든 문자로 시작합니다 .
  • \.[a-zA-Z]{3}$.마지막 3자가 나타납니다.
  • | 또는
  • ^.[^.]+위와 같이
  • \.[a-zA-Z]{2}2 문자의 마지막 두 발생이 두 번 발생합니다.

답변2

등록기관이 TLD 및 FLD를 발행하는 방식을 고려하면 이는 큰 문제이며 간단한 정규 표현식 및 CLI 도구로는 이 문제를 해결할 수 없을 것 같습니다.

나는 이런 것에 의지할 것이다파이썬 모듈,tld. 이 모듈에는 get_tldget_fld기능이 모두 있습니다. 두 번째는 찾고 있는 첫 번째 수준의 도메인 이름을 인쇄합니다.

$ cat fld.py
#!/bin/python

from tld import get_fld

fldList = []
domList = open("domlist.txt").read().splitlines()
for dom in domList:
  fldList.append(get_fld(dom, fix_protocol=True))

print("\n".join(sorted(set(fldList))))

실행 예시:

$ ./gtld.py
domain.co.uk
domain.com

노트:도메인 목록은 이름 아래에 있습니다 domlist.txt.

인용하다

관련 정보