我正在尝试在OSX(zsh)上使用 sed 进行多行替换。
我的输入文件(统一资产文件)如下所示:
...
displaySetting: 0
applicationIdentifier:
Android: com.appid.name
Standalone: com.appid.name
Tizen: com.appid.name
iOS: com.appid.name
tvOS: com.appid.name
buildNumber:
iOS: 190
someOtherID: 190
moreIDsOverHere: 978987
...
我要更换
buildNumber:
iOS: 190
与
buildNumber:
iOS: myBuildNumber
使用以下命令:
sed "N;s/^\\(.*buildNumber:.*.*$^.*iOS: \\)[0-9]*.*$/\\1myBuildNumber/;P;D" file.asset
除行之有效外,它也删除了最后一行。我怀疑这与我使用模式缓冲区有关,但是我似乎无法找到解决方案。
帮助将不胜感激!
最佳答案
您无需在此处使用保留空间。试试这个:
sed "/^[[:space:]]*buildNumber/{n;s/\(iOS: \)[0-9]*/\1myBuildNumber/;}" file
找到
buildNumber
时,n
读取下一行并搜索iOS:
和数字。如果找到,则将模式替换为iOS
(使用反向引用),然后替换为myBuildNumber
。编辑:
要在OSX下就地编辑文件,请添加
-i
标志:sed -i '' "/^[[:space:]]*buildNumber/{n;s/\(iOS: \)[0-9]*/\1myBuildNumber/;}" file