私は次のようなURLのリストを持っています:
hxxp://url.com/subpage.html
hxxp://www.url2.com/index.php
hxxp://subdomain.url3.com/somepage.php
...
Grepを使用してドメイン名のみを照合するにはどうすればよいですか?
すべてのURLには、ドメインの後に/があります。そして、たくさんのTLDがありますが、いくつあるかはわかりませんが、リストはかなり大きいです。
grep
で貪欲でない正規表現を使用するには、-P
オプションを使用する必要があり、-o
オプションは一致する部分のみを出力します。また、一致の一部が出力に含まれないように、ルックアラウンドを使用する必要があります。
grep -Po '.*?//\K.*?(?=/)'
例:
$ echo 'hxxp://subdomain.url3.com/somepage.php' | grep -Po '.*?//\K.*?(?=/)'
subdomain.url3.com
正規表現スキルをテストするのに最適な場所があります ここ 。式は次のようになります
.*?//(.*)/
すべての結果をループする必要があります。私があなたに与えたページで、あなたはこの表現とウェブアドレスを入れることができます、そしてそれはあなたに何が一致したかをあなたに示すでしょう。また、キャプチャされた変数は限られた時間だけ取得されることを忘れないでください。
ドメインの後にTLDが1つしかない場合、これは機能するはずです(サブドメインを除外することを想定しています)。
[^\./]*\.[^\./]*/
末尾にスラッシュが付いていますが、sed
を介してパイプすることができます。