ファイル内の完全なドメイン名を含むgrep抽出行[閉じる]

ファイル内の完全なドメイン名を含むgrep抽出行[閉じる]

次の形式のドメイン名を含む大容量ファイルがあります。

domain.com
sub.domain.com
sub.domain.co.uk
domain.co.uk

最上位ドメイン(.comなど)または国コードの最上位ドメインを使用して、デフォルトドメイン名(サブドメインを除く)を抽出したいと思います。

最上位ドメイン名は常に2〜3文字です(例:.com、.net、.gov)。

国コードの最上位ドメインは常に2文字(例:.uk、.us)で、対応する行の末尾にあります。

したがって、入力に上記のリストが含まれている場合、出力は次のものを抽出する必要があります。

domain.com
domain.co.uk

私は次のような表現を試してみました。

grep -P '^[^\.]+\.[a-zA-Z]{2,3}\.[a-zA-Z]{2}$

これが私の説明です。 -P:perl 正規表現 行除外^:^\.:1 つ +:以上 x 2 ~ 3 つのアルファベット文字 (例: .com, .co) 行末の 2 つのアルファベット文字\.:[a-zA-Z]{2,3}:[a-zA-Z]{2}$:

私の問題:私が得た出力は常に抽出されます。

domain.co.uk

しかし、domain.com

domain.com国コードの最上位ドメイン(たとえば、および)を含むまたは含まない正規表現抽出ドメイン名を作成できますが、サブdomain.co.ukドメイン(たとえば、sub.domain.co.ukまたは)を除外するにはどうすればよいですか。sub.domain.com

ベストアンサー1

あなたの質問は不明です。前述のように定義されたドメイン専用プロジェクトがある場合は、次のように検索できます。

grep -P "^.[^.]+\.[a-zA-Z]{3}$|^.[^.]+\.[a-zA-Z]{2}\.[a-zA-Z]{2}$" FileName
  • grep -PPerl正規表現の使用
  • ^.[^.]+. 次の数の文字を除くすべての文字で始まります。
  • \.[a-zA-Z]{3}$.最後の3文字が表示されます。
  • | または
  • ^.[^.]+上記のように
  • \.[a-zA-Z]{2}2文字の最後の2つの発生が2回発生します。

おすすめ記事