如何替换Perl中许多文件中的特定区域?

时间:2014-05-15 07:25:22

标签: regex perl replace

我正在使用许多xml文件。我想仅在所有文件的特定区域中替换某些特定内容。例如:

文件可能包含以下许多内容:

<h2>Content comes here</h2>

现在我只想在所有文件的上述<h2>...</h2>区域中替换一个单词。

请指教。提前谢谢。

1 个答案:

答案 0 :(得分:3)

Perl中的常规文本替换通常使用正则表达式和s///运算符完成。但是,尝试仅使用正则表达式来解释XML文件的结构被认为是非常不可取的。

您应该使用解析XML的模块。 XML::Simple将允许您将整个文档作为Perl对象加载(使用hashrefs作为属性和子标签等),然后您可以遍历它并执行您想要的替换。但是,您必须根据您的选择编写该结构。

在我看来,

XML::Parser是一个不错的选择。它在概念上有点棘手,但它的设计完全符合您的要求。您设置处理程序函数,每次解析器找到标记的开头或结尾时都会调用它们。在你的情况下,所有这些必须做的是输出标签及其内容,除非它是h2标签,在这种情况下你做了一些额外的处理。

如果你习惯在JavaScript或其他一些基于DOM的XML库中做这样的事情,你可能还想使用一些面向DOM的解析器。

最后,为了完整起见,你可以写一个(非常短的)XSLT文件,它将进行这种转换(不是专家,所以不确定如何)并使用XML::XSLT应用它,基本上是一行。