Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am writing a collectd nagios custom check script in bash. The problem I am having is that nagios shows hostnames as 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 ( 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

share|improve this question
up vote 4 down vote accepted

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)

share|improve this answer
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
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):

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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