Ruby 使用sed在Rakefile中编写xml标记
我试图使用Ruby 使用sed在Rakefile中编写xml标记,ruby,xml,macos,sed,rakefile,Ruby,Xml,Macos,Sed,Rakefile,我试图使用Rakefile预处理一个类似xml的文件,我试图做的是添加一组xml标记 下面的sed是我所做工作的简短版本 sed -ig '/TARGET_STRING/{N;G;s/$/<key>KEY_NAME<\/key>/g;}' whateverfile.xml 执行rake后,会提示错误并终止任务 sed: 1: "/TARGET_STRING/{N;G;s/$/ ...": bad flag in substitute command: 'k' 我搜索了
Rakefile
预处理一个类似xml的文件,我试图做的是添加一组xml标记
下面的sed
是我所做工作的简短版本
sed -ig '/TARGET_STRING/{N;G;s/$/<key>KEY_NAME<\/key>/g;}' whateverfile.xml
执行rake
后,会提示错误并终止任务
sed: 1: "/TARGET_STRING/{N;G;s/$/ ...": bad flag in substitute command: 'k'
我搜索了很长时间,在Ruby
中找不到任何关于转义
字符的信息
我的平台
- 操作系统:Mac OS X 10.9
- Ruby:2.0.0p247
- 耙:0.9.6
- sed:7
更新 嗨,谢谢你们的快速回复 还有“铁皮人”, 对于 我要做的是预处理Xcode项目文件(.pbxproj),它是xml格式的 为了简单起见,我只在这里展示xml结构的示例:
<dict>
<key>Key_ONE</key>
<string>1</string>
</dict>
除了最琐碎和受控的解析之外,对任何事情使用正则表达式都会导致疯狂。使用,一个优秀的RubyXML/HTML解析器。例如:
require 'nokogiri'
xml = <<EOT
<xml>
<foo>foo</foo>
<bar>bar</bar>
</xml>
EOT
doc = Nokogiri::XML(xml)
doc.at('foo').content = 'bar'
doc.at('bar')['class'] = 'cyan'
puts doc.to_xml
需要“nokogiri”
xml=解析器是更好的解决方案
要了解sed的观点,请尝试
`sed -ig '/TARGET_STRING/{
N
s/$/\
<key>KEY_NAME<\/key>/
}' whateverfile.xml`
`sed-ig'/TARGET\u字符串/{
N
/$/\
关键字名称/
}'whateverfile.xml`
G通常不需要,因为没有加载任何内容
g也是不需要的,只有一种替换方法如果要处理XML,为什么要尝试使用正则表达式?取而代之的是使用解析器,例如,这是Ruby最常用的解析器。向我们展示一个合理的XML示例,以及您期望的结果,我们可以帮助您以正确的方式完成。感谢您的快速回复,我会看一看,然后试一试。感谢您提供的解决方案,使用他人的轮子非常好:)谢谢您的建议:)。是否有代码>在N
之后丢失?它显示了sed:1:“/TARGET_STRING/{N s/$/…”:N命令末尾的额外字符
错误界面键盘/椅子,忘记将答案的脚本部分设置为“code”模式。您在一行上是正确的,但在本例中没有丢失;因为这是一个“\N”(已更正的传入代码模式显示)。抱歉
require 'nokogiri'
xml = <<EOT
<xml>
<foo>foo</foo>
<bar>bar</bar>
</xml>
EOT
doc = Nokogiri::XML(xml)
doc.at('foo').content = 'bar'
doc.at('bar')['class'] = 'cyan'
puts doc.to_xml
<?xml version="1.0"?>
<xml>
<foo>bar</foo>
<bar class="cyan">bar</bar>
</xml>
`sed -ig '/TARGET_STRING/{
N
s/$/\
<key>KEY_NAME<\/key>/
}' whateverfile.xml`