Extrair texto usando sed não funciona como esperado [duplicado]

4

Estou apenas começando usando sed e pretendo usá-lo para extrair endereços IP de ping output. Aqui está o que estou tentando alcançar exatamente:

texto de entrada:

ytmti (192.188.2.3) jjggy

resultado desejado:

192.188.2.3

comando Estou tentando:

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

saída atual:

ytmti 192.188.2.3 jjggy

Observação: ytmti e jjggy são realmente substitutos para texto como Pinging unix.stackexchange.com e with 32 bytes of data: .

Acho que usar awk pode ser uma solução melhor para analisar ping de saída. mas eu gostaria de me acostumar com sed .

    
por user293496 24.06.2014 / 08:31

3 respostas

5

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

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

Note que eu uso [^)]* que evita codificar o IP e generalizá-lo para qualquer um deles. Isso produz:

192.188.2.3
    
por 24.06.2014 / 08:38
4

Usando a variável de separação de campo em awk :

echo "ytmti (192.188.2.3) jjggy" | awk -F'[)(]' '{print $2}'                                                                                              
192.188.2.3
    
por 24.06.2014 / 10:38
1

Você também pode fazer:

echo 'ytmti (192.188.2.3) jjggy' | tr -dc '0-9.'
    
por 24.06.2014 / 10:40

Tags