macOS下sed原地追加行报错,求正确执行命令
macOS下sed原地追加行的正确命令
问题场景
Linux系统里可以直接用这条sed命令原地追加行到目标文件:
sed -i "/my_integration_tenants:/a \ - $M_TENANT_ID" ./helm/some-service/values.yaml
但在macOS上执行带-i ''的适配命令时,会弹出报错:
$ sed -i '' "/my_integration_tenants:/a \ - $M_TENANT_ID" ./helm/some-service/values.yaml sed: 1: "/my_integration_ ...": extra characters after \ at the end of a command
试过调整反斜杠数量(1到4个),还是报同样的错。
正确命令
macOS用的是BSD版本sed,和Linux默认的GNU sed语法不一样,追加行时必须让\后面直接换行,以下两种写法都可以:
写法一:直接换行
sed -i '' "/my_integration_tenants:/a \ - $M_TENANT_ID" ./helm/some-service/values.yaml
注意\后面不能有空格,必须直接换行,换行后的缩进空格要保留,这样追加的内容格式才和预期一致。
写法二:用大括号包裹
如果觉得换行麻烦,也可以用大括号把命令块包起来:
sed -i '' "/my_integration_tenants:/{a\ - $M_TENANT_ID }" ./helm/some-service/values.yaml
报错原因
BSD sed的a(追加)命令要求,a后面的\必须紧跟换行,换行后再写要追加的内容;而GNU sed允许\后面直接跟内容,这就是两者的核心语法差异,调整成符合BSD sed的格式就不会报错了。
内容的提问来源于stack exchange,提问作者Dean Schulze
相关产品推荐
相关产品推荐

