I am writing a collectd nagios custom check script in bash. The problem I am having is that nagios shows hostnames as host.name.domain but collectd holds WSP files as host_name_domain. My question is how can I make a variable convert the hostname that it gets from nagios (host.name.domain) to collectd format (host_name_domain).

This is the part where the convertion has to occur. So the WSP_PATH would give out collectd format of hostname in variable $NHOST


Use sed:

$ NHOST="host.domain.tld"
$ NHOST=$(echo $NHOST | sed 's/\./-/g')
$ WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp
$ echo $WSP_PATH

As above, /g is required so that all instances of . are replaced with -

Although on second thoughts, it would probably make more sense to perform this (sed) operation on the $NHOST variable (now edited to show this)

  • But it would be better to use sed on NHOST for sure. Because the sed at the moment would change the uptime.wsp to uptime-wsp and thats not what I would want. But this answer directed me to the right direction. Thank you!
    – mYzk
    Aug 14 '14 at 8:26
  • Quite right! Answer edited
    – GeoSword
    Aug 14 '14 at 8:30
  • 5
    For such single letter translations, you could also use tr: NHOST=$(echo "$NHOST" | tr . _)
    – Lekensteyn
    Aug 14 '14 at 10:47

Bash has the required functionality built in (unless it's an ancient version):


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.