How to use ifconfig to show active interface only
To get a complete description of all the active services, try:
ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active'
This simple regex should filter out only active interfaces and all their information. I sugest you put an alias for this in your ~/.profile or ~/.bash_profile file (maybe ifactive?)
To just get the interface name (useful for scripts), use:
ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active' | egrep -o -m 1 '^[^\t:]+'
You have to install pcregrep for this to work. It's on macports in the pcre package. Alternatively, this should work with GNU grep using grep -Pzo
instead of pcregrep -M -o
but with the rest the same, but I haven't tested this.
If you are not adverse to some bash scripting, you can do this:
for i in $(ifconfig -lu); do if ifconfig $i | grep -q "status: active" ; then echo $i; fi; done
That's will list out the active network interfaces. Tested on Mac OS X 10.13.
The nice thing is that you don't need to install anything. Just run the above in a Terminal.
If you only want to print the “entry” if it contains status: active
, then you could use something like this awk program as a filter to the ifconfig output:
#!/usr/bin/awk -f
BEGIN { print_it = 0 }
/status: active/ { print_it = 1 }
/^($|[^\t])/ { if(print_it) print buffer; buffer = $0; print_it = 0 }
/^\t/ { buffer = buffer "\n" $0 }
END { if(print_it) print buffer }
When each “entry” starts (a line is empty or does not start with a Tab), start saving the entry in a buffer. Append to this buffer any subsequent lines that start with a Tab. Watch for the magic string status: active
; if a line like that was seen, print out the buffer (the previous “entry”) when a new “entry” starts (or the input ends).
Save the above program text in a file and use it like this:
ifconfig -a | awk -f /path/to/file
Or, if you chmod +x
the file, then you can simplify it a bit:
ifconfig -a | /path/to/file