sed: elimina todo del punto después del FQDN

sed: elimina todo del punto después del FQDN

Soy nuevo sedy tengo algunos problemas para que funcione.

Lo que quiero es esto:

abc.ztx.com. A 132.123.12.44 ---> abc.ztx.com

Utilicé el siguiente patrón, pero no parece funcionar:

echo "abc.ztx.com. A 132.123.12.44" | sed 's/\.\s.+//g'

Verifiqué la expresión regular usando regex101.com y el patrón, \.\s.+coincide . A 132.123.12.44perfectamente con la pieza. ¿Por qué no funciona con sed.

Aprecio tu ayuda. Gracias.

Respuesta1

sedutiliza expresiones regulares básicas (BRE) POSIX de forma predeterminada. \ses una PCRE (expresión regular compatible con Perl) que es equivalente a BRE [[:blank:]](creo que coincide con espacios y tabulaciones, o posiblemente [[:space:]]coincide con un conjunto más grande de caracteres de espacios en blanco). Es +un modificador de expresión regular extendida (ERE) POSIX, que equivale a \{1,\}BRE.

Así que intenta

sed 's/\.[[:blank:]].*//'

en cambio. Puedes reemplazarlo [[:blank:]]por un carácter de espacio si no necesitas hacer coincidir las pestañas:

sed 's/\. .*//'

Tenga en cuenta que no es necesario realizar la sustitución con la gbandera, ya que solo habrá una partida. Además, el .+que usa podría simplemente ser reemplazado por .*en lugar de, .\{1,\}ya que no nos importa si hay más caracteres (simplemente elimínelos todos).

Relacionado:

Respuesta2

Si estás usando Gnu/Linux, o cualquier otro Gnu, entonces tendrás Gnu sed. Gnu sed tiene la -ropción que permite esto.

Agregue la opción -rpara cambiar el dialecto de la expresión regular.

p.ej

echo "abc.ztx.com. A 132.123.12.44" | sed -r 's/\.\s.+//g'

Respuesta3

Su pregunta se refiere específicamente a sed, pero lo usaría cutpara esto.

Si puedes vivir con un punto final, entonces:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1

abc.ztx.com.

Si no puedes vivir con el punto final, entonces:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | rev | cut -d. -f2- | rev

abc.ztx.com

o:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | sed -e "s/\.$//"

abc.ztx.com

Respuesta4

Otra posibilidad más usando awk, con .(punto + espacio) especificado como separador de campo:

echo "abc.ztx.com. A 132.123.12.44" | awk -F '\\. ' '{print $1}'

abc.ztx.com

información relacionada