0

我有一个 XML 文件(实际上是 XMLA),它将用于在 MS Analysis Services 中滚动动态删除和创建分区。我的要求是我必须在 unix 中编辑文件,因为文件将被使用并发送到 AS 服务器(即我不能使用 SSIS)。XMLA 是非常可预测的。我基本上有以下内容:该文件将包含一个具有单个 PartitionID 的删除部分,然后是一个具有单个 PartitionID 的创建部分(我消除了噪音)。

<Batch>
  <Delete>
    <PartitionID>Cube_Part_201211</PartitionID>
  </Delete>
  <Create>
    <PartitionID>Cube_Part_201312</PartitionID>
  </Create>
</Batch>

该脚本应将第一个值增加到 *_201212(即加一个月),将第二个值增加到 *_201401(再次加一个月)。使其更容易(我希望)的另一种方法是要更改的值可以相对于今天的日期,而不是增加现有值。

4

1 回答 1

2

一种快速但丑陋的方法......

perl -pe 's/(?<=<PartitionID>)(.*?)(\d{4})(?:(0[1-9]|1[01])|(12))(?=<\/PartitionID>)/sprintf("%s%04d%02d",$1,$2+($4?1:0),$4?1:($3+1))/eg' < input.xml > output.xml
于 2013-11-11T22:53:30.630 回答