Tengo problemas para escribir un comando sed. Haz lo siguiente. Tengo un archivo que sólo debería contener nombres de dominio "válidos". ¿Cómo uso sed para eliminar cualquier línea que no coincida con una expresión?
Lo siguiente parece coincidir con las líneas que quiero conservar en la herramienta en línea que utilicé, aunque estoy seguro de que podría escribirse mejor.
^*.*[a-zA-Z0-9][a-zA-Z0-9-]+\.[a-zA-Z]{2,15}?$
El archivo
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.
Rendimiento 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
Gracias por la ayuda.
Respuesta1
Tuve que modificar tu expresión regular para que sea válida, pero este comando sed imprime solo las líneas que coinciden:
$ 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
Cómo funciona
-n
Esto le dice a sed que no imprima una línea a menos que se lo solicitemos explícitamente.
-r
Esto le dice a sed que use expresiones regulares extendidas.
/[.].*[a-zA-Z0-9][a-zA-Z0-9-]+([.][a-zA-Z]{2,15})?$/p
/.../
selecciona líneas que coinciden con la expresión regular y/.../p
le dice a sed que imprima las líneas que coinciden con la expresión regular.
Cambios en la expresión regular.
Tenga en cuenta que ^*
no es una forma válida de iniciar una expresión regular. ^
coincide con el comienzo de una línea y *
coincidiría con cero o más del carácter anterior, pero no se proporciona ningún carácter anterior. Esto podría hacerse válido con la adición de un punto como en ^.*
. Eso coincide con una línea que comienza con cualquier cosa. Pero como eso no es útil aquí, lo eliminé.
Además, como parece que querías excluir las líneas que terminan con un punto, cambié \.[a-zA-Z]{2,15}?$
a ([.][a-zA-Z]{2,15})?$
.
Para conocer los intentos de otras personas de crear una expresión regular que coincida con los nombres de dominio, consulte, por ejemplo,Validación de nombre de dominio con RegExoexpresión regular coincide con el nombre de dominio principal.