Sed one-liners
I may occasionally publish small notes on clever commands I learn about. Putting it here helps me store knowledge that my shoddy personal data management practices might otherwise lose... One such note is a one-line sed command to print out the Linux interface(s) which handles the default route:
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..
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..
Labels: default route, oneliners, sed
1 Comments:
To make it more obtuse, one can substitute the curly-bracket count of 0s instead of a string of eight 0s. In other words:
sed -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.
Post a Comment
Subscribe to Post Comments [Atom]
<< Home