grep을 사용하여 하위 도메인이 있는 URL 검색

grep을 사용하여 하위 도메인이 있는 URL 검색

다음과 유사한 내용의 파일이 있습니다.

mail.google.com
srv1.mail.google.com
google.com
facebook.com
yahoo.com
tt.twitter.com

하위 도메인이 있는 행을 검색하고 싶습니다. 나는 다음 명령을 사용했습니다.

grep -e '(.\.)*.\..$' test.txt

명령 세부정보:

  • (.\.)*: 문자 뒤에 점이 한 번 이상 오는 경우.
  • .\..$: 임의의 문자 뒤에 점이 온 다음 임의의 문자

찾고 싶은 문자열 패턴의 예:

mail.google.com
srv1.mail.google.com

그러나 아무것도 찾지 못했습니다. 내가 찾고 있는 출력은 하위 도메인이 있는 행이어야 합니다.

mail.google.com
srv1.mail.google.com
tt.twitter.com

답변1

다음을 시도해 보십시오:

grep -E '(.+\.)+.+\..+$' test.txt

산출:

mail.google.com
srv1.mail.google.com
tt.twitter.com

세부 사항:

  • (.+\.)+- 뒤에 점이 오는 문자는 해당 그룹을 한 번 이상 검색합니다.
  • .+\.- 임의의 문자가 한 번 이상 등장하고 그 뒤에 마침표가 옵니다.
  • .+$- 임의의 문자가 한 번 이상 나온 후 줄이 끝납니다.

정규식의 문제는 다음과 같습니다.

  • (.\.)*- 마침표 뒤에 오는 모든 문자와 일치합니다. 하지만 *0번 이상 일치할 수도 있습니다. 당신은 원할 수도 있습니다 +.
  • .\.- 정확히 일치하나문자, 마침표. +첫 번째 .( ) .+뒤의 문자가 하나 이상의 문자와 일치하도록 하려고 합니다 .
  • .$- 정확히 일치하나문자를 입력한 다음 줄의 끝을 입력합니다. +( ) 뒤의 1이 하나 이상의 문자와 일치하도록 하려고 합니다 ...+

답변2

기준을 "최소 두 개의 마침표가 있는 줄"로 줄이려면 간단한 grep을 사용할 수 있습니다.

grep -E '\.[^.]+\.' < file

이렇게 하면 확장된 정규 표현식이 활성화되고 마침표, 하나 이상의 마침표가 아닌 항목, 마침표가 차례로 나옵니다. 마침표의 양쪽에 특정 수의 문자가 표시되도록 요구하여 이를 더욱 강화할 수 있습니다.

grep -E '.\.[^.]+\..' < file

위의 방법은 다음과 같은 입력에 대한 거짓 긍정을 방지합니다.

foo.com.

또는 .com.

기반으로이 스택 오버플로 답변2014년 현재 TLD는 모두 숫자일 수는 없지만 (이론적으로) 단일 문자일 수 있으므로 다음을 사용할 수 있습니다.

grep -E '\.[^.]+\.[[:alpha:]]'

관련 정보