Tive que modificar seu regex para torná-lo válido, mas esse comando sed imprime apenas as linhas correspondentes:
$ sed -nr '/[.].*[a-zA-Z0-9][a-zA-Z0-9-]+([.][a-zA-Z]{2,15})?$/p' file
example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example.example.co.uk
example.photography
example.info
Como funciona
-
-n
Isso diz ao sed para não imprimir uma linha, a menos que solicitemos explicitamente a ela.
-
-r
Isso diz ao sed para usar expressões regulares estendidas.
-
/[.].*[a-zA-Z0-9][a-zA-Z0-9-]+([.][a-zA-Z]{2,15})?$/p
/.../
seleciona as linhas que correspondem à regex e/.../p
informa sed para imprimir as linhas que correspondem à expressão regular.
Alterações na regex
Observe que ^*
não é uma maneira válida de iniciar uma regex. ^
corresponde ao início de uma linha e *
corresponderia a zero ou mais do caractere precedente, mas nenhum caractere precedente é fornecido. Isso pode ser validado com a adição de um período como em ^.*
. Isso corresponde a uma linha que começa com qualquer coisa. Mas, como isso não é útil aqui, eu o removi.
Além disso, como parece que você queria excluir linhas que terminam com um período, alterei \.[a-zA-Z]{2,15}?$
para ([.][a-zA-Z]{2,15})?$
.
Para as tentativas de outras pessoas de tornar um regex compatível com nomes de domínio, consulte, por exemplo, Domain validação de nome com RegEx ou regex corresponde ao nome de domínio principal .