Soy nuevo sed
y 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.44
perfectamente con la pieza. ¿Por qué no funciona con sed
.
Aprecio tu ayuda. Gracias.
Respuesta1
sed
utiliza expresiones regulares básicas (BRE) POSIX de forma predeterminada. \s
es 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 g
bandera, 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 -r
opción que permite esto.
Agregue la opción -r
para 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 cut
para 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