bash - 用 ref 替换文件中匹配的字符串到多行
问题描述
我想 在我的项目文件“project.pbxproj”中用23c54c8g-f935-260c-2b9f-5cce93eb05d3替换 KEY 值(Pods-myapp.release.xcconfig) 15c66c8f-f855-461c-8b6f-5ecf94ea05e3 。问题是为其他配置分配了相同的密钥。我尝试使用 sed 根据事件替换密钥。但是我想确保在正确的位置替换键值,即使文件中的配置(发布、调试、企业)顺序发生了变化。
baseConfigurationReference = DF7B54DFD1BD7EF176BA3943 /* Pods-myapp.release.xcconfig */;
buildSettings = {
KEY = "15c66c8f-f855-461c-8b6f-5ecf94ea05e3";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
.
.
.
baseConfigurationReference = F997700201F34D7A8AEFA5E3 /* Pods-myapp.enterprise.xcconfig */;
buildSettings = {
KEY = "15c66c8f-f855-461c-8b6f-5ecf94ea05e3";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
我试图更换
export KEY='15c66c8f-f855-461c-8b6f-5ecf94ea05e3'
export RELEASE_APP_KEY='23c54c8g-f935-260c-2b9f-5cce93eb05d3'
sed -i '' "1/$KEY/s/$KEY/$RELEASE_APP_KEY/" project.pbxproj
如果在第 2 次或第 n 次出现时找到 Release 配置的键值,如何替换它。
baseConfigurationReference = F997700201F34D7A8AEFA5E3 /* Pods-myapp.enterprise.xcconfig */;
buildSettings = {
KEY = "15c66c8f-f855-461c-8b6f-5ecf94ea05e3";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
.
.
.
baseConfigurationReference = DF7B54DFD1BD7EF176BA3943 /* Pods-myapp.release.xcconfig */;
buildSettings = {
KEY = "15c66c8f-f855-461c-8b6f-5ecf94ea05e3";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
解决方案
只要注释和 then 之间的行数KEY
固定为2
,您可以这样做sed
:
sed '/Pods-myapp.release.xcconfig/{n;n;/KEY/s/15c66c8f-f855-461c-8b6f-5ecf94ea05e3/23c54c8g-f935-260c-2b9f-5cce93eb05d3/;}'
或者为了缩短您可以将键分配给变量的内容并执行以下操作:
k1=15c66c8f-f855-461c-8b6f-5ecf94ea05e3
k2=23c54c8g-f935-260c-2b9f-5cce93eb05d3
sed "/Pods-myapp.release.xcconfig/{n;n;/KEY/s/$k1/$k2/;}" project.pbxproj
解释
基本上上面的命令在/locate/{n;n;/match/s/k1/k2;}
哪里:
/locate/
定位包含"Pods-myapp.release.xcconfig"
然后的行{n;n;
读取(跳过)两行,/match/
(可选)确保该行包含"KEY"
,然后- 您的正常替代形式
k1
被替换为k2
.
示例使用/输出
文件的两个不同顺序位于project.pbxproj
andproject.pbxproj2
中,键位于变量k1
and中k2
:
$ sed "/Pods-myapp.release.xcconfig/{n;n;/KEY/s/$k1/$k2/;}" project.pbxproj
baseConfigurationReference = DF7B54DFD1BD7EF176BA3943 /* **Pods-myapp.release.xcconfig** */;
buildSettings = {
KEY = "23c54c8g-f935-260c-2b9f-5cce93eb05d3";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
.
.
.
baseConfigurationReference = F997700201F34D7A8AEFA5E3 /* Pods-myapp.enterprise.xcconfig */;
buildSettings = {
KEY = "15c66c8f-f855-461c-8b6f-5ecf94ea05e3";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
和
$ sed "/Pods-myapp.release.xcconfig/{n;n;/KEY/s/$k1/$k2/;}" project.pbxproj2)
baseConfigurationReference = F997700201F34D7A8AEFA5E3 /* Pods-myapp.enterprise.xcconfig */;
buildSettings = {
KEY = "15c66c8f-f855-461c-8b6f-5ecf94ea05e3";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
.
.
.
baseConfigurationReference = DF7B54DFD1BD7EF176BA3943 /* Pods-myapp.release.xcconfig */;
buildSettings = {
KEY = "23c54c8g-f935-260c-2b9f-5cce93eb05d3";
推荐阅读
- ajax - Openlayers 在使用 Ajax 检索后显示标记
- python - 我不能在 docx python 中使用具有字体大小和粗体功能的 rtl 功能
- shopify - Shopify - 视频和专题媒体
- php - 如何在通用控制器 Laravel 中使用 FormRequest 调用函数
- css - 如何使用 CSS Grid 中的 grid-template-rows 为所有动态生成的行设置行高
- android - 谷歌 AdMob 验证
- javascript - Flickity & Swup - 摧毁 flickity
- bash - fstab 中未显示的如何挂载
- ios - 未找到模块“firebase_analytics”
- bash - Cmder 不再登录