perl日常处理脚本收集

来源:互联网 发布:老年网络大学 编辑:程序博客网 时间:2024/06/09 18:23
1.包含/tablespace/的行
#!/usr/bin/perl
open(FL,"1")||die "can't open file";
while(<FL>){
s/$_/;/ if /tablespace/i;  
print $_;
}
print "\n";

2.以/tablespace/开头行
...
s/$_/;/ if /^tablespace/i;  
...


3.tablespace大小写并且行前含有空格情况
#!/usr/bin/perl
open(FL,"1")||die "can't open file";
while(<FL>){
s/$_/;/ if /\s*tablespace/i;  
print $_;
}
close(FS,"1");
print "\n";


---------------------------------------------------------------------

功能:遇到create table 情况将后面的tablespace替换成指定的表空间名,遇到create index也是如些;

#!/usr/bin/perl
open(FL,"3")||die "can't open the file\n";
while(<FL>)
{
     if($flag==0) {
                  if(/create\s+\w*\.*table/i) {
                   s/tablespace\s+\w+/TABLESPACE data/;    # tablespace 替换成指定DATA
                    if(/;/) {$flag=0;}                       #如果遇到分号 $flag=0,
                    else {$flag=1;}                          # 否则$flag=1;
                    print $_;     }                        #输出$_;
                  elsif(/create\s+\w*\.*index/i) {                  #否则/create index/ tablespace 替换成指定IND
                   s/tablespace\s+\w+/TABLESPACE ind/;       #如果遇到分号$flag=0,
                   if(/;/){$flag=0;}                        #否则$flag=2;
                   else{$flag=2;}
                   print $_;              }                 #输出$_;
                     else {print $_;}
                  }
      elsif($flag==1){
                    s/tablespace\s+\w+/TABLESPACE data/i;    
                   if(/;/){$flag=0;}                        
                    else{$flag=1;}                        
                   print $_;   }
      elsif($flag==2){
                s/tablespace\s+\w+/TABLESPACE ind/i;
                if(/;/){$flag=0;}
                else{$flag=2;}
                 print $_;
                     }
}
close(FL);


------------------------将文本中的DDL语句的属主要表空间抽出,用perl正则表式2句话就能搞定了,牛---

perl -ne'print "OWNER:".$1."\n"    if /create .* (\w+)\./i;' 3 |sort -u
perl -ne 'print "TABLESPACE:".$1."\n"  if /\s*tablespace\s+(\w+)\s*;/i' 3 |sort -u

------------------------根据表/索引,属主,来替换相应的表空间

[oracle@localhost ~]$ cat t4
#!/usr/bin/perl
$/=';';
open(FL,"4");
my @state=<FL>;
close(FL);
foreach $field (@state){
if ($field =~/create.*index/ig){
  if ($field =~ /NGCRM_COMM\./ig) {
     $field=~s/tablespace\s+\w+/TABLESPACE COMM_IND/ig;
                           }
   elsif($field =~ /NGCRM_FS\./ig){
      $field=~s/tablespace\s+\w+/TABLESPACE XX_CRM_IND/ig;
   }
      elsif($field =~ /GDHSC\./ig){
      $field=~s/tablespace\s+\w+/TABLESPACE GD_HSC_IND/ig;
      }
       elsif($field =~ /FSHSC\./ig){
         $field=~s/tablespace\s+\w+/TABLESPACE FS_HSC_IND/ig;
        }
           elsif($field =~ /FSIB\./ig){
            $field=~s/tablespace\s+\w+/TABLESPACE FS_IB_IND/ig;
        }
               elsif($field =~ /FSIBHIS\./ig){
                $field=~s/tablespace\s+\w+/TABLESPACE FS_IBHIS_IND/ig;
        }
                              }
elsif ($field =~ /\s*create\s+table/ig)
{
if ($field =~ /NGCRM_COMM\./ig) {
     $field=~s/tablespace\s+\w+/TABLESPACE COMM_DATA/ig;
                           }
   elsif($field =~ /NGCRM_FS\./ig){
      $field=~s/tablespace\s+\w+/TABLESPACE XX_CRM_DATA/ig;
   }
      elsif($field =~ /GDHSC\./ig){
      $field=~s/tablespace\s+\w+/TABLESPACE GD_HSC_DATA/ig;
      }
       elsif($field =~ /FSHSC\./ig){
         $field=~s/tablespace\s+\w+/TABLESPACE FS_HSC_DATA/ig;
        }
           elsif($field =~ /FSIB\./ig){
            $field=~s/tablespace\s+\w+/TABLESPACE FS_IB_DATA/ig;
        }
               elsif($field =~ /FSIBHIS\./ig){
                $field=~s/tablespace\s+\w+/TABLESPACE FS_IBHIS_DATA/ig;
        }
}

print $field."\n";
}
[oracle@localhost ~]$

-----------------------------------------------------