继我之前提出的一个问题之后,我试图从两个文件中读取数据,然后逐行解析一个文件,以匹配另一个文件每一行中包含的字符串。第一个是日志文件,第二个我将调用我的密钥文件。我决定使用 foreach 循环遍历密钥文件,然后将其嵌入其中,一个 while 循环将逐步遍历日志的每一行。我正在尝试使用模式匹配来识别特定的字符串,但是这个字符串要么被两个加号(即+name+)包围,要么被一个加号和一个星号(即+name*)包围。不幸的是,我没有太多运气让模式匹配工作......我在下面包含了我的模式搜索代码段的主体:
foreach $element (@fr_array) {
open (LOGFILE, "<", $logname) or die $!;
while (<LOGFILE>) { #While reading one line at a time from the log....
chomp;
$log_string = <LOGFILE>;
if ($log_string =~ /\+$element\+/) {
$fr_count++;
print "Counter increment since $log_string is the same as $element.";
$log_match++;
}
}
编辑
感谢您的反馈,大家...我调用的几个命令用于帮助我跟踪程序并找到问题....我接受了一些建议,经过更多研究,我正在尝试使用grep 命令,但模式匹配似乎仍然无法正常工作。无论我使用什么作为搜索字符串,它似乎都被解析为真的。我整天都在查看代码,但我也不太确定从这里去哪里。在使用正则表达式失败后,我决定使用不同的搜索字符串,这个字符串由除了几个等号之外的所有文字组成。现在,澄清一下,一旦找到匹配的火柴,我就不想对它们做任何事情,我只需要跟踪有多少火柴,因此我使用了计数器。无论如何,我将包含我现在所在位置的更新代码段。我已经确认我的循环工作正常,这只是模式匹配的问题。我现在得到结果,但数字不准确....我的测试日志应该只返回 1 或 2,但它向我吐出 204。
open (LOGFILE, "<", $logname) or die $!;
while($log_string = <LOGFILE>) {
chomp $log_string;
foreach $element (@fr_array) {
$fr_count++ if (grep {"Action=123 Cls=AM"} $log_string)
再次感谢大家的帮助和耐心。:)