AWK:URLを複数の部分に分割して印刷します。

AWK:URLを複数の部分に分割して印刷します。

私には2つのことがあります

http://www.example.com:8888/index.php

http://home.example.com:8888/index.phphome何でも構いませんが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つのステップ:

  1. ://URLまでを含むすべてのアイテムを削除します。
  2. 最初の文字列の後/または残りの文字列の後の:すべての項目を削除します。これで、元のURLのホスト名だけが残りました。
  3. 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をキャプチャできます。

関連情報