regex - sed:替换多行

标签 regex unity3d sed zsh

我正在尝试使用 进行多行替换sed 在 OSX (zsh) 上。
我的输入文件(Unity Asset 文件)如下所示:

...
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

关于regex - sed:替换多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45147094/

相关文章:

php - 在 BOF 或 EOF 查找所有带有 Blank 或 WS 的文件

sed - 就地更换

regex - 后视字符串或字符的开头

python - 使用python和regexp删除字符串中字符串之间的所有xml标签

java - 根据出现次数获取子字符串,正则表达式java

unity3d - 如何在非 GUI 元素中使用 "9-sliced"图像类型?

linux - sed 拆分单行文件并处理结果行

python - 带有python正则表达式的文字括号

c# - 对于 Watson 的 Speech-To-Text Unity SDK,您如何指定关键字?

c# - 连接四(Unity3D 和 C#)的 Minimax : Problems