我有两个XML文件,我想复制和粘贴与SED
- 文件中查找特定的XML节点A
- 复制
- 找到一个特定的部分中的文件B文件B
- 粘贴复制的节点。
sed中已被使用在我的机器上,但我在寻找合适的正则表达式配置的麻烦。
实施例用于文件A:
<Containers>
<Container id="1"> <-- to be copied start
blubb
</Container> <-- to be copied end
<Container id="2">blobb</Container>
</Containers>
实施例用于文件B:
<Containers>
<Container id="1"> <-- copied here start
blubb
</Container> <-- copied here end
<Container id="99">blibb</Container>
</Containers>
我做的:
<Containers>
<Container id="99">blibb</Container>
</Containers>
通过从<Container id="1"
切割成</Container>
以获得所需的输出文件B实施例知道它会更干净,也许更容易使用XML解析器和其他工具,但我需要使用sed,我不是一个非常有经验的sed/regex用户。我只是打得四处“替代”和“删除”一点点,但仅此而已......
我愿澄清:
- 我需要使用sed的,因为这是唯一的工具可用在机器上。
- 我知道,我能做到这一点在其他编程语言和其他工具,但在这里,这是不可能的。应该运行的机器不在我的控制之下!
我知道我不应该使用正则表达式的XML/XHTML - 我知道,但地球是复杂得多。
我cygwin的版本运行此。
更新1:
几个反应。由于这似乎是不可能找到与SED的解决方案。
感谢所有了解这个问题,并试图帮助!
如果有人仍然可以看到一个潜在的解决方案,那么请让我知道。但挑战在于使用sed。我已经使用XML解析器与提升,QT,C#,Java的,......但是,这里根本就不是问题,如果我可以选择......我不能。
更新2:
谢谢大家,特别是本杰明W.这是绝对有可能使用SED来解决这个问题,而是多次表示,如果你必须使用一个XML解析lib和另一可能性技术,那么这应该是一条路。
对我来说,一个非技术问题(伪安全指南)已经解决了与现有的技术解决方案。
这是我的最终解决方案:
sed "/<Container id=\"1\">/,/<\/Container>/!d" fileA.xml |^
sed -i "/<Containers>/r /dev/stdin" fileB.xml
谢谢。
Ruby,Perl,Python,Swift,都有简单的xml解析器。不要尝试使用面向行的1980年代ERE正则表达式工具来解析面向块的语法。 Square peg =>圆孔。不要使用锤子。 – dawg
*我不是一个非常有经验的sed/regex用户*这是一种不好的方法来尝试和学习... – dawg
我认为你错过了一点 - 使用Regex解析任意XML比“更困难”更糟糕,这实际上在逻辑上是不可能的。如果您不能使用XML解析器,那么您无法执行该项目。 – EJoshuaS