You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用sed -i修改YAML文件变量报错,如何实现文件覆盖?

解决sed -i修改YAML文件时的"extra characters at the end of d command"错误

这个问题我之前在macOS环境下也踩过坑!原因是不同版本的sed-i参数的语法要求不一样:你用的是Linux上GNU sed的写法,但如果是在macOS(BSD sed)环境下,-i参数必须指定一个备份文件的后缀(哪怕你不想保留备份),否则就会报这个错误。

正确的解决方法

方法1:适配macOS(BSD sed)的命令

直接给-i后面加一个空字符串后缀(注意-i''之间不能有空格),这样既不会生成备份文件,又能直接修改原文件:

sed -i '' 's/%APP_NAME%/newappname/g' app.yaml

方法2:兼容Linux和macOS的写法(可选)

如果你需要跨平台兼容,可以用这种写法,它会生成一个.bak备份文件,之后你可以手动删除:

sed -i.bak 's/%APP_NAME%/newappname/g' app.yaml
# 可选:删除备份文件
rm app.yaml.bak

验证修改结果

执行命令后,你可以查看修改后的YAML文件内容:

cat app.yaml

应该会看到预期的结果:

...
metadata:
  name: appname
spec:
  replicas: 3
  selector:
    matchLabels:
      app: newappname

小提示

如果不确定替换规则是否正确,可以先不加-i参数测试输出,确认没问题后再执行修改原文件的命令:

sed 's/%APP_NAME%/newappname/g' app.yaml

内容的提问来源于stack exchange,提问作者Beno Odr

火山引擎 最新活动