私には2つのことがあります
http://www.example.com:8888/index.php
http://home.example.com:8888/index.php
(home
何でも構いませんがwww
)
そしてこれを得たいと思います:
example.com
home.example.com
1年後にどのように機能するかを理解できるように、読みやすい方法で行うことをお勧めします。
私の試みは次のとおりです。
echo http://www.example.com:8888/index.php | awk -F[/:\'www\'] '{print $7}'
しかし、結果は
.example.com
(注意)www.example.comに適用する場合
home.example.com
使用できる場合は、print $4
どちらの場合も同じ印刷句を使用することをお勧めします。
ありがとうございます。
答え1
sed
解決策:
sed -E 's~http://(www\.)?([^:]+).*~\2~' file
~
-sed
サブコマンド区切り文字として扱われます。-E
- 拡張正規表現を許可(www\.)?
- オプションwww.
部品の一致([^:]+)
- 以下を除くすべての文字シーケンスと一致します。:
出力:
example.com
home.example.com
答え2
3つのステップ:
://
URLまでを含むすべてのアイテムを削除します。- 最初の文字列の後
/
または残りの文字列の後の:
すべての項目を削除します。これで、元のURLのホスト名だけが残りました。 www.
ホスト名の先頭など、不要な部分を削除してください。
sed -e 's@^.*://@@' -e 's/[/:].*$//' -e 's/^www\.//'
例URLでこのコマンドを実行すると、次のようになります。
example.com
home.example.com
使用awk
:
awk -F'[/:]+' '{ sub("^www\.", "", $2); print $2 }'
:
これは、入力行を任意の数の連続または区切りフィールドレコードで構成されるものとして扱います/
。これは、各行の2番目のフィールドでホスト名を使用できることを意味します。
これsub()
により、興味のないホスト名部分(ここではwww.
ホスト名の先頭)が削除されます。
答え3
GNU awkとそのフィールドパターン定義の使用FPAT
:
awk -v FPAT='([^/]+\\.)+[^:/]+' '{print $1}'
/
フィールドパターンは、次の点を除く一連の文字で設定され.
、またはで:
終わる必要があります/
。
URLには多少緩んでいる可能性がありますが、ポート番号がある場合とないFQDNをキャプチャできます。