![grep을 사용하여 하위 도메인이 있는 URL 검색](https://linux55.com/image/138834/grep%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%98%EC%9C%84%20%EB%8F%84%EB%A9%94%EC%9D%B8%EC%9D%B4%20%EC%9E%88%EB%8A%94%20URL%20%EA%B2%80%EC%83%89.png)
다음과 유사한 내용의 파일이 있습니다.
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:]]'