使用hostname的最后一个字符更新my.cnf auto_increment_offset

时间:2012-03-11 21:09:57

标签: bash sed awk

我需要取机器的主机名并抓住最后一个字符。在此示例中,主机名为:web-01

我想从主机名中获取“1”。此命令也将在web-02等上使用

我的工作非常好:

hostname | awk '{print substr($0,length,1)}'

获得该号码后,我需要更新文件。在这种情况下,我需要更新以下行:

auto_increment_offset = 0

它应该成为:

auto_increment_offset = <the last character of the hostname>

我试图用以下方式完成这部分:

sed -i "/^auto_increment_offset/s/0/$1/" /etc/mysql/conf.d/my.cnf;

我试图运行完整命令:

hostname | awk '{print substr($0,length,1)}' | sed -i "/^auto_increment_offset/s/0/$1/" /etc/mysql/conf.d/my.cnf

由于某种原因,它不起作用,我需要稍微退出一点,所以我想我会寻求帮助。而已。请告诉我,我是一个白痴并协助我完成这项工作。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

稍微简化了你的命令,这个适用于我:

sed "/^auto_increment_offset/s/=.*/= ${HOSTNAME#${HOSTNAME%?}}/" /etc/mysql/conf.d/my.cnf;

答案 1 :(得分:0)

这可能是你正在寻找的......我只是把你写的东西拿来,并在sed中写了一些sed。我经常使用这种技巧来解决类似的问题 - 即使它不是很简洁。否则gergoerdosi的回答是更好的imo。

hostname | awk '{print substr($0,length,1)}' | sed -e "s%\(.*\)%sed -i \"/^auto_increment_offset/s/0/\1/\" /etc/mysql/conf.d/my.cnf %" | sh