如何用sed命令实现条件化搜索替换不同的PRODUCT_BUNDLE_IDENTIFIER值?
用sed实现差异化替换Bundle Identifier
要针对不同的Bundle Identifier做差异化替换,你可以给sed叠加多个替换规则,每个规则对应一组替换需求:
方法一:精准匹配整行替换
直接针对目标行做精准替换,命令如下:
sed -i -e 's/PRODUCT_BUNDLE_IDENTIFIER = "BundleA";/PRODUCT_BUNDLE_IDENTIFIER = "BundleZ";/' -e 's/PRODUCT_BUNDLE_IDENTIFIER = "BundleB";/PRODUCT_BUNDLE_IDENTIFIER = "BundleX";/' text.txt
方法二:正则捕获组适配格式差异
如果配置文件里PRODUCT_BUNDLE_IDENTIFIER行的空格可能有细微变化(比如等号前后空格数量不同),可以用正则捕获组锁定固定部分,只替换Bundle名称:
sed -i -e 's/\(PRODUCT_BUNDLE_IDENTIFIER = "\)BundleA\(";\)/\1BundleZ\2/' -e 's/\(PRODUCT_BUNDLE_IDENTIFIER = "\)BundleB\(";\)/\1BundleX\2/' text.txt
这里\( \)用来捕获需要保留的前后文本,\1和\2分别引用捕获到的内容,确保只替换中间的Bundle名称部分。
替换后效果
执行命令后,你的text.txt内容会变成:
{ 2D02E40000B4A5E006451C7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_BUNDLE_IDENTIFIER = "BundleZ"; }; name = Debug; }; 2D02E4981E0000006451C7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { PRODUCT_BUNDLE_IDENTIFIER = "BundleX"; }; name = Release; }; }
内容的提问来源于stack exchange,提问作者wong john
相关产品推荐
相关产品推荐

