我有一个文本文件,在文件的第4行以下面提到的格式显示日期和时间:
[0x1FFD] LOG 2017/02/22 06:20:48.644 Diagnostic Version Length: 0149 255
现在,我必须在文件中删除字符串“ 2017/02/22 06:20:48.644 ”。
这个日期和时间不是固定的,每当我保存文件时它都会改变(它需要当前的日期和时间)。
由于我不是一名perl编码员,我发现很难找到方法。
注意:我只需要在输入文件中进行更改。我不需要创建单独的输出文件。
提前致谢!
答案 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;
请在最后检查并测试。