Remova nomes de domínio inválidos com Sed

Remova nomes de domínio inválidos com Sed

Estou tendo problemas para escrever um comando sed, faça o seguinte. Eu tenho um arquivo que deve conter apenas nomes de domínio "válidos". Como uso com sed para remover alguma linha que não corresponda a uma expressão?

O texto a seguir parece corresponder às linhas que desejo manter na ferramenta on-line que usei, embora tenha certeza de que poderia ser escrito melhor.

^*.*[a-zA-Z0-9][a-zA-Z0-9-]+\.[a-zA-Z]{2,15}?$

O arquivo

example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example
example.example.co.uk
(example)
example.photography
example.info
example/
example.
example</h1>
{example}
etc.

Resultado esperado:

example.example.example.org
01.001.11.00.example.com
asdf-asdf-asdf-www.example.net
example.example.co.uk
example.photography
example.info

Obrigado pela ajuda.

Responder1

Tive que modificar seu regex para torná-lo válido, mas este 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.

  • -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 ao regex e /.../pdiz ao sed para imprimir as linhas que correspondem ao regex.

Mudanças na regex

Observe que essa ^*não é uma maneira válida de iniciar um regex. ^corresponde ao início de uma linha e *corresponde a zero ou mais do caractere anterior, mas nenhum caractere anterior é fornecido. Isso poderia ser validado com a adição de um ponto como em ^.*. Isso corresponde a uma linha que começa com qualquer coisa. Mas, como isso não ajuda aqui, removi-o.

Além disso, como parece que você queria excluir linhas que terminam com ponto final, mudei \.[a-zA-Z]{2,15}?$para ([.][a-zA-Z]{2,15})?$.

Para tentativas de outras pessoas de criar uma regex para corresponder a nomes de domínio, consulte, por exemplo,Validação de nome de domínio com RegExouregex corresponde ao nome de domínio principal.

informação relacionada