从文本文件

时间:2017-02-22 07:29:58

标签: perl

我有一个文本文件,在文件的第4行以下面提到的格式显示日期和时间:

[0x1FFD]     LOG                 2017/02/22 06:20:48.644  Diagnostic Version                                Length: 0149                                                255  

现在,我必须在文件中删除字符串“ 2017/02/22 06:20:48.644 ”。

这个日期和时间不是固定的,每当我保存文件时它都会改变(它需要当前的日期和时间)。

由于我不是一名perl编码员,我发现很难找到方法。

注意:我只需要在输入文件中进行更改。我不需要创建单独的输出文件。

提前致谢!

2 个答案:

答案 0 :(得分:1)

use strict;
use warnings;
my $str = " [0x1FFD]     LOG         2017/02/22 06:20:48.644  Diagnostic Version     and more stuff";
$str =~ s|\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}\.\d{3}||;
print $str;

如果它在文件中,您需要遍历文件并打印每一行以排除日期。

喜欢这个

use strict;
use warnings;
open FILE, "<", "filename.log" or die $!;
my @list = <FILE>;
foreach my $str(@list) {
     $str =~ s|\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}\.\d{3}||;
     print $str;
}
close(FILE);

所以从那里你可以弄清楚如何将它写回原始文件。 :)

答案 1 :(得分:0)

  

您可以使用Tie::File模块一次更新输入文件。

use warnings;
use strict;
use Tie::File;

my $str = 'data1.txt';

tie my @lines, 'Tie::File', $str or die $!;

my $joinLines = join "\n", @lines;
  

根据正则表达式修改使用#1或#2

#1. $joinLines=~s/(LOG\s)(.*?)(\sDiagnostic Version)/$1$3/g;
#2. $joinLines =~ s/\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}\.\d{3}//;


print $joinLines;

@lines = split /\n/, $joinLines;

untie @lines;
  

请在最后检查并测试。