Caractere especial ou caractere curinga no separador de campos awk

1

Gostaria de saber sobre o caracter especial ou caractere curinga no seguinte comando:

/sbin/ifconfig eth0 | awk -F ' *|:' '/inet addr/{print $4}'

O que o código abaixo significa?

awk -F ' *|:' '  
    
por krock1516 14.05.2015 / 06:11

2 respostas

2

O sinalizador -F (para awk) significa usar a expressão regular estendida a seguir como um Field separator . Isso significa que ele trata qualquer um dos caracteres entre aspas simples aqui: ' *|:' como delimitadores.

O Awk irá imprimir o quarto campo que possui uma correspondência com inet addr .

Por exemplo: se essa for a saída de ifconfig eth0 :

eth0      Link encap:Ethernet  HWaddr 09:00:12:90:e3:e5  
          inet addr:192.168.1.29 Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe70:e3f5/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:54071 errors:1 dropped:0 overruns:0 frame:0
          TX packets:48515 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:22009423 (20.9 MiB)  TX bytes:25690847 (24.5 MiB)
          Interrupt:10 Base address:0xd020 

Deve imprimir

192.168.1.29

Para dividir a expressão regular:

' *|:'

o

' *'

Significa qualquer número de espaços e os caracteres restantes não têm significado especial, portanto, qualquer um deles pode ser um delimitador. O * em si não é um delimitador, significa apenas qualquer número do caractere precedente, um espaço.

    
por 14.05.2015 / 06:36
0

Como você sabe, ip command existe em /sbin e /bin , portanto, se você quiser executar seu script em não-raiz, você pode usar a seguinte instrução:

mohsen@debian:~$ ip addr show eth0 |grep inet |grep -v inet6 | awk '{print $2}' |awk -F/ '{print $1}'
192.168.1.4
    
por 14.05.2015 / 16:15