2012-03-11 57 views
1

我需要取出机器的主机名并抓住最后一个字符。在这个例子中,主机名是:web-01用主机名的最后一个字符更新my.cnf auto_increment_offset

我想从主机名获得“1”。该命令也将在网络-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 

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

回答

1

简化您的命令一下,这个工作对我来说:

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

你是我最喜欢的人。非常感谢你。我喜欢简化。我知道有一个更好的方法可以去解决这个问题,并且你钉住了它。谢谢。 – k10 2012-03-12 02:10:56

+0

不客气。 – 2012-03-12 07:36:19

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