我想要执行以下操作,获取服务器的主机IP,然后使用此值替换配置文件中的虚拟值。
对于第1步获取服务器ip,我打电话:
hostname -I | head -n1 | awk '{print $1;}'
对于步骤2来替换文件中的虚拟值,我会这样做:
sed -i 's/dummyvalue/valuefromprevioushostnamecommand/g' filename.
我们的想法是将这些步骤合并到一个unix命令中,而不使用任何shell脚本。
对此的任何帮助将不胜感激 罗布
答案 0 :(得分:3)
你几乎就在那里 - 只需将两个命令嵌套在一起:
sed -i s/'dummyvalue'/$(hostname -I | head -n1 | awk '{print $1;}')/g filename
请注意,您需要删除s///g
周围的单引号,并将其放在dummyvalue
周围。否则bash不会尝试解释内部命令。
答案 1 :(得分:1)
使用awk时,您不需要一系列管道命令。只需在一个awk命令中执行此操作即可。您没有显示任何样本输入和预期输出,因此这显然未经测试,但如果不完全正确,您将接近所需:
hostname -I |
awk -i inplace 'NR==FNR{if (FNR==1) val=$1; nextfile} {gsub(/dummyvalue/,val)} 1' - filename
以上使用gawk 4. *代表-i inplace
和nextfile
,其他代码就是这样做:
hostname -I |
awk 'NR==FNR{if (FNR==1) val=$1; next} {gsub(/dummyvalue/,val)} 1' - filename > tmp && mv tmp filename