-1

我有一个巨大的文件,其中包含以下类似的行,具有不同的时钟:

cmd -quiet [get_ports p1] ref_clocks "cudtclk_sp cudtclk"

cmd -quiet [get_ports p2] clock "cu2xdtclk_sp cu2xdtclk"

每当我的文件中有 ref_clocks 时,我都需要用其他名称(如 cdtclk)替换 cudtclk,全局。

我已经编写了以下代码,但它似乎不起作用。

#!/usr/bin/perl 
use strict;
use warnings;

sub clock_change 
{       # Get the subroutine's argument.
   my $arg = shift;
   # Hash of stuff we want to replace.
   my %replace = ( 
      "cudtclk" => "cdtclk",
   );

   # See if there's a replacement for the given text.
   my $text = $replace{$arg};

   if(defined($text)) {
      return $text;
   } 

   return $arg;
}

open PAR, "<file name>";
while(<PAR>) {
   $_ =~ s/\S+\s\S+\s\S+\s\S+\sref_clocks\s+(\S+\s+\S+)/clock_change($1)/eig;
   print $_;   ##print it to some file later.
}
4

2 回答 2

3

“而且我需要用 cdtclk 之类的其他名称替换 cudtclk”

perl -pe 's/\bcudtclk\b/cdtclk/' thefile > newfile

“每当我有 ref_clocks”

perl -pe 's/\bcudtclk\b/cdtclk/ if /\bref_clocks\b/' thefile > newfile

或者:

# saves original file as file.bak
perl -i.bak -pe 's/\bcudtclk\b/cdtclk/ if /\bref_clocks\b/' file

必要时拧紧以适合您的数据。

于 2013-06-04T02:46:23.007 回答
0

尽管替换看起来不必要地复杂,但您可以使用类似于以下内容的方法来修复它:

$_ =~ s/(ref_clocks\s+")([^_]+)_sp(\s+)\2/
     $1.clock_change($2)."_sp$3".clock_change($2)/eig;
于 2013-06-04T02:49:46.700 回答