Recién estoy comenzando a usarlo sed
y tengo la intención de usarlo para extraer direcciones IP de ping
la salida. Esto es lo que estoy tratando de lograr exactamente:
texto de entrada:
ytmti (192.188.2.3) jjggy
salida deseada:
192.188.2.3
comando que estoy intentando:
echo "ytmti (192.188.2.3) jjggy" | sed 's:\((\(192.188.2.3\))\):\2:'
salida de corriente:
ytmti 192.188.2.3 jjggy
Nota: ytmti
y jjggy
en realidad son sustitutos de textos como Pinging unix.stackexchange.com
y with 32 bytes of data:
.
Creo que usar awk
podría ser una mejor solución para analizar ping
la salida, pero me gustaría acostumbrarme sed
.
Respuesta1
El comando de sustitución sed
reemplaza todos los caracteres que coinciden en la primera sección con todos los caracteres de la segunda sección, por lo que necesitará .*
uno similar y agrupará solo la parte para guardar, como:
echo " ytmti (192.188.2.3) jjggy" | sed 's:^.*(\([^)]*\).*$:\1:'
Tenga en cuenta que uso [^)]*
eso para evitar codificar la IP y generalizarla para cualquiera de ellas. Cede:
192.188.2.3
Respuesta2
Usando la variable separadora de campo en awk
:
echo "ytmti (192.188.2.3) jjggy" | awk -F'[)(]' '{print $2}'
192.188.2.3
Respuesta3
También puedes hacer:
echo 'ytmti (192.188.2.3) jjggy' | tr -dc '0-9.'