我有一个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(再加上一个月)。另一种方法是让它更容易(我希望)是要改变的值可以相对于今天的日期而不是增加现有值。
答案 0 :(得分: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