次のような内容のファイルがあります。
mail.google.com
srv1.mail.google.com
google.com
facebook.com
yahoo.com
tt.twitter.com
サブドメインのある行を検索したいです。私は次のコマンドを使用しました。
grep -e '(.\.)*.\..$' test.txt
コマンドの詳細:
(.\.)*
:文字の後にドットが複数回来る場合。.\..$
:ランダムな文字の後にドットが来てからランダムな文字
探したい文字列パターンの例:
mail.google.com
srv1.mail.google.com
しかし、何も見つかりませんでした。私が探している出力はサブドメインを持つ行でなければなりません。
mail.google.com
srv1.mail.google.com
tt.twitter.com
ベストアンサー1
以下を試してください。
grep -E '(.+\.)+.+\..+$' test.txt
出力:
mail.google.com
srv1.mail.google.com
tt.twitter.com
詳細:
(.+\.)+
- 後にドットが続く文字は、そのグループを1回以上検索します。.+\.
- 任意の文字が1回以上登場し、その後にピリオドが続きます。.+$
- ランダムな文字が1回以上出て行が終わります。
正規表現の問題は次のとおりです。
(.\.)*
- ピリオドの後に続くすべての文字と一致します。ただし、*
0回以上一致することもあります。あなたが望むかもしれません+
。.\.
- 正確に一致一つ文字、ピリオド。+
最初の.
().+
の後の文字が1つ以上の文字と一致するようにします。.$
- 正確に一致一つ文字を入力し、行の終わりを入力します。+
()の後の1が1つ以上の文字と一致するようにします。.
.+