Extrair texto usando sed não funciona como esperado

Extrair texto usando sed não funciona como esperado

Estou apenas começando a usar sede pretendo usá-lo para extrair endereços IP da pingsaída. Aqui está o que estou tentando alcançar exatamente:

Entrada de texto:

ytmti (192.188.2.3) jjggy

saída desejada:

192.188.2.3

comando que estou tentando:

echo "ytmti (192.188.2.3) jjggy" | sed 's:\((\(192.188.2.3\))\):\2:' 

saída atual:

ytmti 192.188.2.3 jjggy

Nota: ytmtie jjggysão realmente substitutos para textos como Pinging unix.stackexchange.come with 32 bytes of data:.

Acho que usar awkpode ser uma solução melhor para analisar pinga saída, mas gostaria de me acostumar com o sed.

Responder1

O comando de substituição sedsubstitui todos os caracteres correspondentes na primeira seção por todos os caracteres da segunda seção, então você precisará .*de um similar e agrupar apenas a parte a ser salva, como:

echo " ytmti (192.188.2.3) jjggy" | sed 's:^.*(\([^)]*\).*$:\1:'

Observe que eu uso [^)]*isso para evitar codificar o IP e generalizá-lo para qualquer um deles. Produz:

192.188.2.3

Responder2

Usando a variável separadora de campo em awk:

echo "ytmti (192.188.2.3) jjggy" | awk -F'[)(]' '{print $2}'                                                                                              
192.188.2.3

Responder3

Você também pode fazer:

echo 'ytmti (192.188.2.3) jjggy' | tr -dc '0-9.'

informação relacionada