sed is a very powerful tool. Small than awk and grep and much more powerful. Some would also say it’s harder to use, but I like it :)
Whilst putting a mini resolvconf into dhcpcd, I use very similar code to what I already had. But, I ran into a wall- dhcpcd needs to work when /usr is not mounted as it may be network mounted later. On Gentoo and most Linux distros, sed is found in /bin. However, on NetBSD it’s in /usr/bin.
Oh what is a man to do :?
Luckily, we can fall back to shell for simple sed usage. Here’s a simple snippet
key_get_value()
{
local key="$1" value= x= line=
shift
if [$#-eq 0 ](); then
while read line; do
case "${line}" in
"${key}"*) echo "${line##${key}}";;
esac
done
else
for x; do
while read line; do
case "${line}" in
"${key}"*) echo "${line##${key}}";;
esac
done < "${x}"
done
fi
}
Old call
sed -ne 's/^nameserver //p' /etc/resolv.conf
New call
key_get_value "nameserver " /etc/resolv.conf
According to the time command on dash and bash shells this is ever so slightly faster when doing resolvconf-u
. This is probably because we aren’t forking an external command. Also, we’re working on small files- this probably sucks hard for big ones.
Anyway, this has made it into openresolv-1.6 which now works in the root of a BSD system without /usr mounted :)