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

これはsed4つの式を一緒に結び付けます。

  • s|^.*://||:最初から含めるまですべて削除://
  • s|/.*$||:最初のスラッシュから最後まで残っているすべてを削除します。
  • s|:.*$||:最初のコロンから最後まで残っているすべてを削除します。
  • s|^.*@||:以下を含むすべてのコンテンツを削除します@ftp://user:[email protected]

残りは実際にドメインの一部www.something.comです。wwwunix.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

関連情報