在MacOs上,sed -i不起作用(sed: 1),但在Linux上起作用。

13 浏览
0 Comments

在MacOs上,sed -i不起作用(sed: 1),但在Linux上起作用。

我成功地在Linux上使用sed -i命令修改了文件中的JSON值。\n

$> sed -i '/brand/c\   \"brand\": \"'valueModified'\"' ./config/brand.config.json

\n但在MacOS上,我遇到了以下错误:\n

\nsed: 1: \"./config/brand.config.json\": 无效的命令代码 .\n

\n我正在尝试在Linux和macOS上的shell脚本中使用这个命令。\n谢谢。

0
0 Comments

问题:sed -i在MacOS上不起作用(sed: 1),但在Linux上起作用。

原因:POSIX的sed实现允许使用-I选项进行行替换,而非POSIX的UNIX实现不允许。OSX和BSD实现可以通过以下方式实现:

cp -p ./config/brand.config.json ./config/brand.config.json.tmp;
sed '/brand/c\   \"brand\": \"'valueModified'\"' ./config/brand.config.json.tmp > ./config/brand.config.json

解决方法:在MacOS上,可以使用上述命令来实现行替换。首先,使用cp命令创建一个临时文件brand.config.json.tmp,然后使用sed命令将brand.config.json.tmp中的行替换为"brand": "valueModified",并将结果输出到brand.config.json文件中。这样可以实现与sed -i相同的效果。

0