sed를 사용하여 도메인을 제외한 URL에서 모든 것을 제거하는 방법은 무엇입니까?

sed를 사용하여 도메인을 제외한 URL에서 모든 것을 제거하는 방법은 무엇입니까?

URL에서 모든 것을 제거하고 도메인만 유지해야 합니다.

sed 이전 예:

https://www.something.com/something/something
https://www.something.com:8080/something/something

sed 이후:

XX웹사이트

답변1

이 같은?

$ url1='https://www.something.com:8080/something/something'
$ url2='http://www.someting.com/something/something'
$ printf "%s\n%s\n" "$url1" "$url2" | \
>   sed -e 's|^.*://||' \
>       -e 's|/.*$||' \
>       -e 's|:.*$||' \
>       -e 's|^.*@||' \
www.something.com
www.someting.com

이는 sed네 가지 표현식을 함께 연결합니다.

  • s|^.*://||: 처음부터 포함까지 모두 삭제://
  • s|/.*$||: 첫 번째 슬래시부터 끝까지 남은 모든 것을 제거합니다.
  • s|:.*$||: 첫 번째 콜론부터 끝까지 남은 모든 것을 제거합니다.
  • s|^.*@||: 다음을 포함한 모든 콘텐츠를 삭제합니다 @.ftp://user:[email protected]

남은 것은 실제로 도메인의 일부 www.something.com입니다 . www( unix.stackexchange.com다른 IP를 갖는 것과 비교 math.stackexchange.com)

답변2

Perl 모듈을 사용하여 URIURL에서 호스트 이름을 추출한 다음 www.호스트 이름의 시작 부분을 교체하여 제거합니다.

perl -MURI -ple '$_ = URI->new($_)->host(); s/^www\.//'

시험:

$ cat file
https://www.something.com/something/something
https://www.something.com:8080/something/something
https://something.com:999/something/something
$ perl -MURI -ple '$_ = URI->new($_)->host(); s/^www\.//' <file
something.com
something.com
something.com

답변3

GNU와 같은 정규식과 유사한 구현 및 옵션을 grep지원 함으로써 :perl-P-ogrep

grep -iPo '://([^/@]*@)?(www\.)?\K(\[.*?\]|[^:/]+)'

([^/@]*@)?URL을 처리하려면 해당 user:pass@부분(있는 경우)을 건너뛰십시오 .\[.*?\]https://[abcd::cdef]/ipv6

적절한 URI 확인자를 사용하는 것이 더 좋습니다.@Kusalananda의 접근 방식하지만.

답변4

사용sed

$ sed -E 's/[^.]*\.([[:alpha:].]+).*/\1/' input_file
something.com
something.com

관련 정보