次の形式のドメイン名を含む大容量ファイルがあります。
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 -P
Perl正規表現の使用^.[^.]+
.
次の数の文字を除くすべての文字で始まります。\.[a-zA-Z]{3}$
.
最後の3文字が表示されます。|
または^.[^.]+
上記のように\.[a-zA-Z]{2}
2文字の最後の2つの発生が2回発生します。