sed -n 's/\(^[^\t]*\)\t00000000.*/\1/p' /proc/net/routeAn explanation, from left to right: Don't print each line (-n), prepare for a substitution ('s/), look for a string of non-tab characters at the beginning of the line (^[^\t]*) while saving the results (the \( and \) parts surrounding that), followed by a single tab and a string of eight 0s (\t00000000), followed by anything to gobble up the rest of the line (.*), then substitute it all with the non-tabs string saved earlier (/\1/), and print it (p'). The eight 0s represent the default route of 0.0.0.0/0.
To be really specific the eight 0s specify a route for a network of undetermined size starting at 0.0.0.0. For the true default route, I should also check for a mask of 00000000, as OpenVPN sometimes adds two net routes (0.0.0.0/1 and 128.0.0.0/1) to avoid the need to replace the existing default route. This command will find anything starting at 0.0.0.0 as a default route, which may or may not be what you want... In reality, since 0.0.0.0/8 is reserved, if a route starts at zero, it's pretty defaulty anyway..
To make it more obtuse, one can substitute the curly-bracket count of 0s instead of a string of eight 0s. In other words:
ReplyDeletesed -n 's/\(^[^\t]*\)\t0\{8\}.*/\1/p' /proc/net/route
That saves a whopping two characters in the regex and makes it look even more like black magic.