我有格式为当前日期的 cron 日志文件是 9 月 22 日
9 月 22 日 13:00:01 主机名 crond[24359]: (root) CMD (/usr/lib64/sa/sa1 1 1)
我想使用以下格式打印日志文件直到“sep 21”
date:time:user:command format
怎么样:
perl -pe 'exit if /^Sep 22/;' input.log
你去:
#!/usr/bin/perl
use warnings;
use strict;
open (my $IN,'<','foo.log') or die "$!";
while (<$IN>) {
last if /^Sep 22/;
print join(':',/^(\w{3}\s\d{1,2})\s(\d{2}:\d{2}:\d{2}).+\((.+?)\) CMD \((.+?)\)/),"\n";
}
close $IN;
同样,单线风味:
perl -nle "exit if /^Sep 22/;print join(':',/^(\w{3}\s\d{1,2})\s(\d{2}:\d{2}:\d{2}).+\((.+?)\) CMD \((.+?)\)/)" foo.log
如果您希望将来能够再次运行您的脚本,您可以使用当前日期:
#!/usr/bin/perl
use warnings;
use strict;
my (undef,undef,undef,$mday,$mon)=localtime(time);
my @abbr=qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
open (my $IN,'<','foo.log') or die "$!";
while (<$IN>) {
last if /^$abbr[$mon] $mday/;
print join(':',/^(\w{3}\s\d{1,2})\s(\d{2}:\d{2}:\d{2}).+\((.+?)\) CMD \((.+?)\)/),"\n";
}
close $IN;