我正在尝试在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

09-04 18:43
查看更多