您好,我尝试在文件中的特定字符串之后插入命令输出> 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)
答案 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
的变量,这不是您想要的。您需要使用$(...)
语法。您最初的尝试还遇到了嵌套引号的问题,这是行不通的。