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 모듈을 사용하여 URI
URL에서 호스트 이름을 추출한 다음 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
-o
grep
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