awk 또는 sed를 사용하여 하위 도메인 삭제

awk 또는 sed를 사용하여 하위 도메인 삭제

텍스트 파일의 모든 하위 도메인을 삭제하는 방법은 무엇입니까? "."를 포함하여 그 앞에 있는 모든 항목을 삭제해야 한다고 생각합니까?

입력하다:

unix.stackexchange.com
www.example.org
example.example.tld

예상 출력:

stackexchange.com
example.org
example.tld

편집하다:

하위 도메인이 없는 도메인은 변경되지 않은 상태로 유지되어야 합니다. 전체 도메인에 하위 도메인이 있는 경우에만 터치해야 합니다. 즉, "."이 2개 이상

google.com은 google.com 입력을 유지해야 합니다.

google.com
mail.google.com

예상 출력:

google.com
google.com

답변1

첫 번째 하위 도메인을 삭제하려면 다음 단계를 따르세요.

cut -d . -f 2- input

여러 수준의 하위 도메인이 있는 경우 조합을 사용하여 도메인의 마지막 두 요소를 보존 sub2.sub1.domain.com할 수 있습니다 .cutrev

rev input | cut -d . -f -2 |  rev

답변2

견본

www.google.com
prep.ai.mit.edu

마지막 두 개의 최상위 도메인을 유지하고,

사용sed

sed 's/.*\.\(.*\..*\)/\1/'

어디

  • .*\.Greedy는 모든 문자(점 포함) 및 점과 일치합니다.
  • \( \)일치하는 문자열을 기억하세요
  • .*\..*임의의 문자를 여러 번 사용(1), 임의의 문자를 여러 번 사용
  • (1) 상기 욕심으로 인해 포인트가 매칭되지 않습니다.
  • \1처음 기억된 문자열을 불러옵니다.

사용(gnu)grep

grep -Eo '[^.]*.[^.]*$' data
google.com
mit.edu
  • 정규식 패턴( ) 은 행 끝에 앵커가 있는 것을 [^.]*.[^.]*$제외하고 대부분 위와 같이 읽습니다 .$

첫 번째 하위 도메인 제거, 사용 sed(정보 유지, 사양 변경됨)

sed -e 's/^[^.]*\.//' data
google.com
ai.mit.edu

어디

  • ^[^.]*\.점이 아닌 ^줄의 시작 으로 발음되며 점 으로 여러 번 발음됩니다 .[^.].*\.
  • 아무것도 대체되지 않았습니다.
  • 주석에서 언급했듯이 이것은 (줄이 점으로 시작하지 않는 경우) sed로 단축될 수 있습니다 .'s/[^.]*.//'

답변3

.해당 필드가 행의 구분된 마지막 두 필드가 될 것으로 판단되면 다음을 사용할 수 있습니다.

$ awk -F. -v OFS='.' '{print $(NF-1),$NF}' file
stackexchange.com
example.org
example.tld

또는 sed:

$ sed 's/.*\.\([^.]*\..*\)$/\1/' file
stackexchange.com
example.org
example.tld

그리고 sed지원 한다면 -E약간 더 깔끔해집니다.

 sed -E 's/.*\.([^.]*\..*)$/\1/' file
stackexchange.com
example.org
example.tld

답변4

기준을 사용하여 sed마지막 및 마지막에서 두 번째 구성 요소를 제외한 모든 구성 요소를 제거합니다 .

sed 's/.*\.\(.*\..*\)/\1/'

불행하게도 이 정규 표현식은 폭풍우 이후의 숲처럼 보입니다. 단계별로 구축해 봅시다:

  • .*\.점으로 끝나는 임의 개수의 문자(점 포함)입니다.
  • 표현식 뒤에는 또 다른 점이 필요하므로 .*\.시작부터 두 번째 점까지 모든 것이 일치됩니다.
  • 이제 우리는 줄의 나머지 부분에 점이 하나만 있다고 확신합니다(말 그대로 점이므로 .*\..*나머지 부분과 일치시키기에 충분합니다).
  • \(\)교체 시 재활용할 수 있도록 이 잔해를 내부에 넣고 \1나머지는 모두 버립니다.

시각적 설명:

subdomain.domain.tld
sub1.sub2.domain.tld
`--v----´ `-v--´ `v´
   .*   \.  .* \. .*

관련 정보