将命令的结果传递给 SED
passing the result of a command to SED
我想执行以下操作,获取我的服务器的主机 IP,然后使用此值替换配置文件中的虚拟值。
对于获取服务器 ip 的第 1 步,我调用:
hostname -I | head -n1 | awk '{print ;}'
对于第 2 步替换文件中的虚拟值,我会这样做:
sed -i 's/dummyvalue/valuefromprevioushostnamecommand/g' filename.
我们的想法是在不使用任何 shell 脚本的情况下将这些步骤合并到一个 unix 命令中。
如有任何帮助,我们将不胜感激
罗布
您就快完成了 - 只需将两个命令嵌套在一起即可:
sed -i s/'dummyvalue'/$(hostname -I | head -n1 | awk '{print ;}')/g filename
请注意,您需要删除 s///g
周围的单引号,并将它们放在 dummyvalue
周围。否则 bash 不会尝试解释内部命令。
使用 awk 时不需要管道命令链。只需在一个 awk 命令中完成。您没有显示任何样本输入和预期输出,因此这显然未经测试,但即使不完全符合您的需要,也会接近您的需要:
hostname -I |
awk -i inplace 'NR==FNR{if (FNR==1) val=; nextfile} {gsub(/dummyvalue/,val)} 1' - filename
以上使用 gawk 4.* 用于 -i inplace
和 nextfile
,其他 awks 只做:
hostname -I |
awk 'NR==FNR{if (FNR==1) val=; next} {gsub(/dummyvalue/,val)} 1' - filename > tmp && mv tmp filename
我想执行以下操作,获取我的服务器的主机 IP,然后使用此值替换配置文件中的虚拟值。
对于获取服务器 ip 的第 1 步,我调用:
hostname -I | head -n1 | awk '{print ;}'
对于第 2 步替换文件中的虚拟值,我会这样做:
sed -i 's/dummyvalue/valuefromprevioushostnamecommand/g' filename.
我们的想法是在不使用任何 shell 脚本的情况下将这些步骤合并到一个 unix 命令中。
如有任何帮助,我们将不胜感激 罗布
您就快完成了 - 只需将两个命令嵌套在一起即可:
sed -i s/'dummyvalue'/$(hostname -I | head -n1 | awk '{print ;}')/g filename
请注意,您需要删除 s///g
周围的单引号,并将它们放在 dummyvalue
周围。否则 bash 不会尝试解释内部命令。
使用 awk 时不需要管道命令链。只需在一个 awk 命令中完成。您没有显示任何样本输入和预期输出,因此这显然未经测试,但即使不完全符合您的需要,也会接近您的需要:
hostname -I |
awk -i inplace 'NR==FNR{if (FNR==1) val=; nextfile} {gsub(/dummyvalue/,val)} 1' - filename
以上使用 gawk 4.* 用于 -i inplace
和 nextfile
,其他 awks 只做:
hostname -I |
awk 'NR==FNR{if (FNR==1) val=; next} {gsub(/dummyvalue/,val)} 1' - filename > tmp && mv tmp filename