Вот то, что я пытаюсь достичь.
У меня есть скрипт на perl, который просматривает группу для непосредственного анализа найденных файлов и находит определенную строку.Если он находит конкретную строку, он игнорирует ее, если находит первую часть строки, но вторая часть не совпадает, он записывает ее в файл журнала.
Часть, с которой я застрял,как прочитать весь файл и посмотреть, существует ли строка во всем файле.
Некоторый фон, я пытаюсь написать скрипт, который будет читать прогорклые файлы cisco и ищет подробности регистрации в sys.,Они сохраняются в конфигурации как таковые
logging xxxx
, где xxxx - IP-адрес системного журнала.
В настоящее время я могу читать в файле, проверять его построчнои посмотреть, содержит ли файл запись в журнал xxxx, если он это делает, он игнорирует его.
Если он содержит запись в журнал yyyy (где y - это IP, отличный от того, каким он должен быть), он запишет в журналфайл, который протоколирование настроено, но неправильно настроено.Но я не могу на всю жизнь разобраться, как заставить его читать весь файл, и если в журнале xxxx или даже в журнале yyyy не существует, выписать, что он не настроен.
скрипт ниже
#!/usr/bin/perl
use strict;
use warnings;
#Syslog Checker.... V0.0.1
##Config Items
my $basedir = "/home/srelf/Documents/Projects/perl/Configs";
my @verdir = qw(sw_a);
my $fulldir;
my $configs;
my $loghost = "x.x.x.x";
my $combidir;
use POSIX qw(strftime);
$now_string = strftime "%a%b%e%Y", gmtime;
open FILE, ">>Configchecker.$now_string.txt" or die $!;
print FILE "### Logging Host Settings ###\n";
close FILE;
foreach $combidir (@verdir) {
$fulldir = "$basedir/$combidir";
opendir( DIR, $fulldir );
my @files = grep { $_ ne '.' && $_ ne '..' } readdir DIR;
closedir(DIR);
while ( @files > 0 ) {
$configs = pop @files;
# print "$fulldir/$configs\n"; # used for debug shows current file with full path.
open FH, "$fulldir/$configs" or die $!;
@dataarry = <FH>;
foreach my $line (@dataarry) {
# Start an if statement, the condition of which is
# "If this particular line contains logging + IP address."
if ( $line =~ m/logging \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/i ) {
#then if the line located above contains logging and the log host ignore it
if ( $line =~ m/logging $loghost/i ) {
}
# if the above line contains an ip but it is not the correct ip do the below.
elsif ( $line =~
m/logging \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/i )
{
open FILE, ">>Configchecker.$now_string.txt" or die $!;
print FILE "$configs\n";
print FILE
"Logging for this device is set, but pointing at the wrong host: $line\n";
close FILE;
} # End the if condition here.
}
}
} # End the foreach loop here;
open FILE, ">>Configchecker.$now_string.txt" or die $!;
print FILE "### NTP Settings Check ###\n";
close FILE;
}
Заранее спасибо за любую помощь.
Я новичок в Perl, это мой первый шанс.Стив.