Estou apenas começando a usar sed
e pretendo usá-lo para extrair endereços IP da ping
saí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: ytmti
e jjggy
são realmente substitutos para textos como Pinging unix.stackexchange.com
e with 32 bytes of data:
.
Acho que usar awk
pode ser uma solução melhor para analisar ping
a saída, mas gostaria de me acostumar com o sed
.
Responder1
O comando de substituição sed
substitui 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.'