我试图使用perl修改文本文件中的一些内容

时间:2015-04-04 08:11:44

标签: regex perl

我正在尝试使用perl脚本中的正则表达式修改文本文件中的某些内容,它不会修改任何内容,但是当我在textpad中使用相同的常规表达式时它会修改

输入

    ab 3fdfs2sd 6 Feb 2015.doc Creatings som junk text: ccpsd(1).xml.
    sdfdgd .df . fds  18 Mar 2015.doc  Creatings som junk text: ccpsd(2).xml.

输出需要:

    ccpsd(1).xml-ab 3fdfs2sd 6 Feb 2015.xml
    ccpsd(2).xml-sdfdgd .df . fds  18 Mar 2015.xml

    use strict;
    open(FILE, "<G:/in.txt") || die "File not found";
     my @lines = <FILE>;  
     close(FILE);

    my @newlines;
    foreach(@lines) {

       $_ =~ s/(^.+?)\.doc\s*.+?[\:]\s*(CC.+?xml)\./\2-\1.xml/igs;

          push(@newlines,$_);
    }

    open(FILE, ">/out.txt") || die "File not found";
    print FILE @newlines;
    close(FILE);

3 个答案:

答案 0 :(得分:0)

您应该使用双>>并指定文件名:

my $outfile = 'out.txt';
open (FILE, ">> $outfile") || die "File not found";

正如此sample program中所测试的那样,正则表达式很好。

答案 1 :(得分:0)

在我看来,您错过了输出文件的驱动器 我做了:

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

my $in_file  = 'G:/in.txt';
my $out_file = 'G:/out.txt';

open my $in, '<', $in_file or die "Unable to open '$in_file': $!";
open my $out, '>', $out_file or die "Unable to open '$out_file': $!";
while(<$in>) {
    chomp;
    s/^(.+?)\.doc\s*.+?:\s*(CC.+?xml)\./$2-$1.xml/i;
    print $out $_,"\n";
}

答案 2 :(得分:0)

只需使用Perl one-liner

perl -pe's/(^.+?)\.doc\s*.+?[\:]\s*(CC.+?xml)\./\2-\1.xml/ig'

BTW您是否阅读过perldoc perlre并确定自己明白了吗?因为您按行读取了输入文件,并且代码中的s修饰符没有任何意义。如果你真的想为多行模式应用regexp,你应该使用。

perl -0777 -pe's/(^.+?)\.doc\s*.+?[\:]\s*(CC.+?xml)\./\2-\1.xml/igs'