【发布时间】:2023-04-08 04:22:02
【问题描述】:
我试图使用Rakefile 预处理一个类似xml 的文件,我想要做的是添加一组xml 标签。
以下sed是我所做的简短版本
sed -ig '/TARGET_STRING/{N;G;s/$/<key>KEY_NAME<\/key>/g;}' whateverfile.xml
这段代码在使用终端时运行良好并且成功。
然后我把它们放入我制作的Rakefile,像这样:
desc 'setup pods archs'
task :setup_podsarchs => :setup_submodules do
puts 'Altering xml...'.cyan
`sed -ig '/TARGET_STRING/{N;G;s/$/<key>KEY_NAME<\/key>/g;}' whateverfile.xml`
end
执行rake后提示错误并终止任务
sed: 1: "/TARGET_STRING/{N;G;s/$/ ...": bad flag in substitute command: 'k'
我找了很久,找不到任何关于转义Ruby中的<和>字符的信息。
我的平台
- 操作系统:Mac OS X 10.9
- 红宝石:2.0.0p247
- 耙:0.9.6
- sed: 7
更新
您好,感谢大家的快速回复。
还有@the Tin Man, 对于comment,
我要做的是预处理 Xcode 项目文件 (.pbxproj),它的结构是 xml,
为简单起见,我这里只展示xml结构的例子:
<dict>
<key>Key_ONE</key>
<string>1</string>
</dict>
我要做的是找到KEY_ONE 并在此之后添加另一个密钥:
<dict>
<key>Key_ONE</key>
<string>1</string>
<key>Key_TWO</key>
<string>2</string>
</dict>
【问题讨论】:
-
如果您正在处理 XML,为什么要尝试使用正则表达式?而是使用解析器,例如 Nokogiri,这是 Ruby 最常用的解析器。向我们展示一个合理的 XML 样本,以及您期望的结果,我们可以帮助您以正确的方式完成。
标签: ruby xml macos sed rakefile