用大括号中的s进行准确的文本替换吗?

时间:2019-03-08 23:40:17

标签: bash sed

作为构建过程的一部分,我正在尝试从命令行修改xcode项目文件。

我要更改:

...
SystemCapabilities = {
  com.apple.InAppPurchase = {
    enabled = 0;
  };
};
...

对此:

...
SystemCapabilities = {
  com.apple.InAppPurchase = {
    enabled = 1;
  };
};
...

我可以用来解决此问题的最简单的解决方案是运行:

sed -i '' 's/enabled = 0/enabled = 1/' myapp.pbxproj

但是,我觉得这很危险,因为即使它可以工作,但是如果文件中的其他地方有enabled = 0也会有问题。是否有更好的方法使用sed来确保我仅将enabled = 0对象中的com.apple.InAppPurchase的特定实例作为目标?

1 个答案:

答案 0 :(得分:1)

您可以使用地址范围告诉sed仅在com.apple.InAppPurchase}之间应用替换:

sed '/com\.apple\.InAppPurchase/,/}/s/enabled = 0/enabled = 1/'