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
4つの式を一緒に結び付けます。
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