Tente o seguinte:
grep -E '(.+\.)+.+\..+$' test.txt
Saída:
mail.google.com
srv1.mail.google.com
tt.twitter.com
Detalhes:
-
(.+\.)+
- qualquer caractere seguido de ponto, pesquise esse agrupamento uma ou mais vezes. -
.+\.
- qualquer caractere, uma ou mais vezes seguidas por um único período. -
.+$
- qualquer caractere uma ou mais vezes, seguido por um fim de linha.
O problema com sua expressão regular é / são:
-
(.\.)*
- corresponde a qualquer caractere e, em seguida, a um período. Mas o*
pode corresponder a zero ou mais vezes. Você provavelmente quer+
. -
.\.
- corresponde exatamente a um caractere e, em seguida, um período. Você deseja que um+
após o primeiro.
(.+
) corresponda a um ou mais caracteres. -
.$
- corresponde exatamente a um caractere e, em seguida, um fim de linha. Você deseja que um+
após o.
(.+
) corresponda a um ou mais caracteres.