命令输出> sed在特定字符串后替换

时间:2019-06-26 17:17:15

标签: bash unix awk sed centos

您好,我尝试在文件中的特定字符串之后插入命令输出> sed replace作为机器启动时用户数据的一部分的输出

[centos@ip-192-168-2-22 scylla]$ sudo sed -i.bak 's/broadcast_rpc_address: : /broadcast_rpc_address:\/$hostname -i | awk '{print $2}'/' /etc/scylla/scylla.yaml

文件当前为

broadcast_rpc_address:

替换为

broadcast_rpc_address: (the ip of the machine)

1 个答案:

答案 0 :(得分:1)

类似的事情应该起作用:

sed -i.bak "s/broadcast_rpc_address:/broadcast_rpc_address: $(hostname -i)/" /etc/scylla/scylla.yaml

这会将broadcast_rpc_address:替换为broadcast_rpc_address: $(hostname -i)。现在,由于此字符串用双引号-而不是单引号-告诉外壳程序解释字符串中的一些魔术序列。特别是$(somecommand)意味着运行某些命令并将其输出插入字符串。当然,在我上面给出的命令中,将“ hostname -i”更改为您想要的其他任何内容(甚至可以是整个管道。

您最初的尝试使用了以$hostname开头的内容。这种语法$hostname不会运行命令hostname,而是查找名为hostname的变量,这不是您想要的。您需要使用$(...)语法。您最初的尝试还遇到了嵌套引号的问题,这是行不通的。