Perl脚本替换扩展名称和修剪空格

时间:2011-03-15 17:26:44

标签: perl

我是perl的新手。

目前,我的任务是遍历文件夹中的所有.htm文件,并做两件事:

  1. 将所有“.htm”扩展名替换为“.xml”
  2. 将文件名中的所有空格替换为下划线。
  3. 在我的perl脚本中,我提出了这两行:

    @pub=`ls $sourceDir | grep '\.htm' | grep -v Default |  head  -550`;
    foreach (@pub) {
    
    my $docName = $_;
    chomp($docName);
    
        $docName =~ s/.htm$//g;
        $docName =~ s/ /_/g;
                 ....}
    

    $ docName是保存文件当前全名的变量(包括扩展名)。有趣的是,那两个$ docName替换语句,在任何时候,只有上面的一个工作。例如,这里的示例代码只会替换扩展名但不会占用空格,但如果我注释掉第一个,那么空白区域会完全变为下划线,但扩展名仍为“.htm”。

    专家可以帮助我吗?还可以建议我哪里出错了?提前谢谢!

2 个答案:

答案 0 :(得分:2)

你确定全部是

吗?
$docName =~ s/.htm$//g;

正在做什么?

您需要转义.并添加替换字符串。你也不需要g,因为右锚确保它只能发生一次。

$docName =~ s/\.htm$/\.xml/;

除此之外,你应该没事。

答案 1 :(得分:0)

尝试:

my @pub = grep { ! /Default/ } glob( '*.htm' );

for my $pub ( @pub ){
  $pub =~ s{ \. htm \z }{}msx;
  $pub =~ s{ \s+ }{_}gmsx;
  print "$pub\n";
}

请参阅:

perldoc -f glob
perldoc -f grep
perldoc perlretut
perldoc perlre