다음 형식의 도메인 이름이 포함된 대용량 파일이 있습니다.
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 -P
Perl 정규 표현식 사용^.[^.]+
.
다음과 같은 수의 문자를 제외한 모든 문자로 시작합니다 .\.[a-zA-Z]{3}$
.
마지막 3자가 나타납니다.|
또는^.[^.]+
위와 같이\.[a-zA-Z]{2}
2 문자의 마지막 두 발생이 두 번 발생합니다.
답변2
등록기관이 TLD 및 FLD를 발행하는 방식을 고려하면 이는 큰 문제이며 간단한 정규 표현식 및 CLI 도구로는 이 문제를 해결할 수 없을 것 같습니다.
나는 이런 것에 의지할 것이다파이썬 모듈,tld
. 이 모듈에는 get_tld
및 get_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
.