我有需要与 CVS 文件进行比较的 Oracle 文件,但问题是有很多文件我想忽略第一行作为差异的一部分。我想运行一个脚本来打开每个文件,并以最终输出替换'CREATE OR REPLACE PACKAGE "TRON"."SOME_PACKAGE" IS'
为'CREATE OR REPLACE PACKAGE SOME_PACKAGE IS'
. 我遇到的问题是该语句可以跨越多行,所以我必须考虑这样的情况。'CREATE OR REPLACE "TRON"."SOME_PACKAGE"
IS'
我的方法(因为这是 Jenkins 工作的一部分)是遍历工作区中的所有文件,修改任何符合此条件的文件。然后我可以使用我现有的 Perl 脚本,它正在使用File::Compare
and Text::Diff::Table
。
我一直在测试Zaid 的解决方案,但收效甚微,因为它仍然无法处理命令字符串跨越多行的情况。(我的改变):
use strict;
use warnings;
use Tie::File;
use Data::Dumper;
my @array;
tie @array, 'Tie::File', 'c:\cb_k_check_recon_mma.sps' or die "Unable to tie file";
my %unwanted = map { $_ => 1 }
map { $_-1..$_-4, $_, $_+2 .. $_+4 }
grep { $array[$_] =~ /^CREATE.*[IS|AS]$/ }
0 .. $#array ;
print Dumper \%unwanted;
@array = map { $array[$_] } grep { ! $unwanted{$_} } 0 .. $#array;
print Dumper \@array;
untie @array;