Bash 转换变量中的字符

Bash 转换变量中的字符

我正在用 bash 编写 collectd nagios 自定义检查脚本。我遇到的问题是 nagios 将主机名显示为 host.name.domain,但 collectd 将 WSP 文件保存为 host_name_domain。我的问题是如何让变量将从 nagios (host.name.domain) 获得的主机名转换为 collectd 格式 (host_name_domain)。

这是必须进行转换的部分。因此,WSP_PATH 将在变量 $NHOST 中给出 collectd 格式的主机名

WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp

答案1

使用 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
/var/lib/carbin/whisper/ctd/host-domain/uptime/uptime.wsp

如上所述,/g 是必需的,以便所有 . 实例都替换为 -

尽管再三考虑,对 $NHOST 变量执行此 (sed) 操作可能更有意义(现在已编辑以显示这一点)

答案2

Bash 内置了所需的功能(除非是古老版本):

WSP_PATH=/var/lib/carbon/whisper/ctd/${NHOST//./-}/uptime/uptime.wsp

相关内容