awk 또는 sed를 사용하여 최상위 도메인(TLD) 및 두 번째 수준 도메인(SLD)을 삭제합니다.

awk 또는 sed를 사용하여 최상위 도메인(TLD) 및 두 번째 수준 도메인(SLD)을 삭제합니다.

텍스트 파일에 하위 도메인이 없는 도메인 목록이 있습니다. TLD와 SLD를 제거해야 합니다.

입력하다

google.uk
example.com
amazon.co.uk
domain.ca.uk
education.edu.it

예상 출력:

google
example
amazon
domain
education

답변1

이를 위해 awk 또는 sed가 필요하지 않습니다. 이것이 cut존재합니다.

$ cut -d'.' -f1 file
google
example
amazon
domain
education

답변2

나는 내 질문에 대한 답을 찾았습니다. 매우 간단하다는 것이 밝혀졌습니다

awk -F. '{print $1}' input_file
  • 나는 사용한다'. '-F'를 구분 기호로 사용합니다. 이렇게 SLD와 TLD를 $2 및/또는 $3 열에 넣었습니다.

  • "{print $1}"을 사용하면 첫 번째 열의 텍스트만 인쇄하며 이것이 필요한 출력입니다.

답변3

sed "s/\..*//" filename

google
example
amazon
domain
education

\.첫 번째 텍스트 지점과 그 이후의 모든 항목 과 일치합니다 .*. 아무것도 대체 되지 않으므로 s첫 번째 지점부터 시작하는 모든 항목이 삭제됩니다.

답변4

사용행복하다(이전 Perl_6)

~$ raku -ne 'put .split(".")[0];'  input_file

awk아마도 Raku 솔루션이 도움이 될 것입니다. 위의 내용은 Raku(및 Perl)가 0 인덱스라는 점을 제외하면 코드를 상당히 유사하게 번역한 것입니다 . Raku의 -ne"비자동 인쇄 라인" 명령줄 플래그를 사용하십시오(더 sed유사한 동작을 위해서는 Raku의 -pe명령줄 플래그를 사용하십시오).

Raku는 Perl보다 적은 수의 명령줄 스위치를 제공하므로 언어로 더 많은 작업을 수행할 수 있습니다(코드 이식성 향상). 이는 결과 문자열에서 이를 split파괴적으로 제거하는 데 사용되는 필드 구분 기호를 정의합니다. .그런 다음 [0]인덱스가 0인 첫 번째 요소는 put( put끝에 개행 문자를 추가하는 "print-using-terminator"의 약자)입니다.

입력 예:

google.uk
example.com
amazon.co.uk
domain.ca.uk
education.edu.it

예제 출력:

google
example
amazon
domain
education

https://raku.org

관련 정보