2015-05-21 134 views
0

我想要做以下操作,获取我的服务器的主机IP,然后使用此值替换配置文件中的虚拟值。将命令的结果传递给SED

对于第1步中获取服务器的ip我打电话:

hostname -I | head -n1 | awk '{print $1;}' 

对于第2步替换文件中的虚拟价值,我会做:

sed -i 's/dummyvalue/valuefromprevioushostnamecommand/g' filename. 

的想法是要结合本步入一个unix命令而不使用任何shell脚本。

任何帮助,将不胜感激 罗布

回答

3

你就要成功了 - 只是窝在彼此的两个命令:

sed -i s/'dummyvalue'/$(hostname -I | head -n1 | awk '{print $1;}')/g filename 

请注意,您需要删除周围的单引号围绕着s///g,并将它们放在dummyvalue左右。否则bash不会尝试解释内部命令。

+0

感谢您的快速响应。让我给一个镜头。 –

+0

就像一个魅力,为什么我不能接受你的答案? –

+0

如果该主机名称命令链的输出包含任何代表sed替换上下文中的某些字符(例如, '/','&','\ 1'等 –

1

当您使用awk时,您不需要一系列管道命令。只需在一个awk命令中完成。你没有表现出任何样本输入和期望输出所以这显然是未经测试,但将接近你所需要的,如果不完全:

hostname -I | 
awk -i inplace 'NR==FNR{if (FNR==1) val=$1; nextfile} {gsub(/dummyvalue/,val)} 1' - filename 

上述用途呆子4 *为-i inplacenextfile,与其他awks只是这样做:

hostname -I | 
awk 'NR==FNR{if (FNR==1) val=$1; next} {gsub(/dummyvalue/,val)} 1' - filename > tmp && mv tmp filename