perl - 仅在函数定义中删除逗号后的新行

时间:2013-10-08 21:24:53

标签: regex perl

正则表达式命令仅在函数定义中删除逗号之后的新行。

ChainCtrlUpdateHandler defaultUpdateHandlers[kVideoRouteNodeMax] =
{

    ChainCtrlUpdateMonitorRoute,
    ChainCtrlUpdateVideoOutRoute,
};

eErrorT ChainCtrlInitChains(ChainCtrlT* pChainCtrl,
    char* name,
    int instance,
    void* pOwner,
    )
 {
   ...
 }

OUTPUT DESIRED

ChainCtrlUpdateHandler defaultUpdateHandlers[kVideoRouteNodeMax] =
{

    ChainCtrlUpdateMonitorRoute,
    ChainCtrlUpdateVideoOutRoute,
};
eErrorT ChainCtrlInitChains(ChainCtrlT* pChainCtrl,char* name,int instance,void* pOwner)
{
   ....
}

请注意 .c文件中有许多函数定义

我的代码

open(my $FILE, "< chaincontroller.c") or die $!;
my @arr = <$FILE>;
foreach (@arr){
     $_ =~ s/,\n/,/;
     print $_;
  }

它删除',\ n'到处都是,但我只需要为函数定义做它。

1 个答案:

答案 0 :(得分:2)

尝试这样做:

perl -00 -ple 's/,\s*\n/,/gms if /\(/ .. /\)/' filename.txt

使用脚本:

perl -MO=Deparse -00 -ple 's/,\s*\n/,/gms if /\(/ .. /\)/' filename.txt

代码:

BEGIN { $/ = ""; $\ = "\n\n"; }
LINE: while (defined($_ = <ARGV>)) {
    chomp $_;
    s/,\s*\n/,/gms if /\(/ .. /\)/;
}
continue {
    die "-p destination: $!\n" unless print $_;
}