La extracción de texto usando sed no funciona como se esperaba

La extracción de texto usando sed no funciona como se esperaba

Recién estoy comenzando a usarlo sedy tengo la intención de usarlo para extraer direcciones IP de pingla 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: ytmtiy jjggyen realidad son sustitutos de textos como Pinging unix.stackexchange.comy with 32 bytes of data:.

Creo que usar awkpodría ser una mejor solución para analizar pingla salida, pero me gustaría acostumbrarme sed.

Respuesta1

El comando de sustitución sedreemplaza 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.'

información relacionada