我正在尝试使用 进行多行替换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/