Search code examples
regexgrep

Extracting IP address from a line from ifconfig output with grep


Given this specific line pulled from ifconfig, in my case:

inet 192.168.2.13 netmask 0xffffff00 broadcast 192.168.2.255

How could one extract the 192.168.2.13 part (the local IP address), presumably with regex?


Solution

  • Here's one way using grep:

    line='inet 192.168.2.13 netmask 0xffffff00 broadcast 192.168.2.256'
    
    echo "$line" | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
    

    Results:

    192.168.2.13
    192.168.2.256
    

    If you wish to select only valid addresses, you can use:

    line='inet 192.168.0.255 netmask 0xffffff00 broadcast 192.168.2.256'
    
    echo "$line" | grep -oE "\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
    

    Results:

    192.168.0.255
    

    Otherwise, just select the fields you want using awk, for example:

    line='inet 192.168.0.255 netmask 0xffffff00 broadcast 192.168.2.256'
    
    echo "$line" | awk -v OFS="\n" '{ print $2, $NF }'
    

    Results:

    192.168.0.255
    192.168.2.256
    


    Addendum:

    Word boundaries: \b