使用sed

时间:2019-02-07 20:22:01

标签: linux bash curl amazon-ec2 sed

我正在尝试使用curl获取dns地址,我想使用该dsn地址替换.js文件中的单词。

.js文件包含一个“主机名”一词,我想用从curl获取的dns地址替换它,所以我想这样做。

sed 's/hostname/curl -s http://169.254.169.254/latest/meta-data/public-hostname/g' server.js

我收到一条错误消息sed: -e expression #1, char 26: unknown option to s'

2 个答案:

答案 0 :(得分:0)

您首先需要在子Shell中执行curl命令。然后,由于URI中的“ /”,您需要使用其他分隔符。 '|'应该工作

dns_address=$(curl -s http://169.254.169.254/latest/meta-data/public-hostname)
sed "s|hostname|${dns_address}|g" server.js

注意双引号。为了扩展变量,它们是必需的。

或者必须在一行中

sed "s|hostname|$(curl -s http://169.254.169.254/latest/meta-data/public-hostname)|g" server.js

或者我可能误解了这个问题,而您想将实际命令放在server.js中

sed 's|hostname|curl -s http://169.254.169.254/latest/meta-data/public-hostname|g' server.js

相关:How to use variables in a command in sed?

答案 1 :(得分:0)

我只需要转义'/'就可以了

sed 's/hostname/curl -s http:\/\/169.254.169.254\/latest\/meta-data\/public-hostname/g' server.js

如果要替换文件内部,则可以使用临时文件

sed 's/hostname/curl -s http:\/\/169.254.169.254\/latest\/meta-data\/public-hostname/g' server.js > temp.js
mv temp.js server.js

有更好的方法可以做到这一点,不确定是否满足您的需求