【发布时间】:2014-07-16 14:56:38
【问题描述】:
我有这个脚本,它的目标是比较 /var/adm/messages 并检查当前的最后一行是否等于检查的最新行。 问题是即使字符串相同,脚本仍然将它们视为不相等并继续执行 if 语句。 这是脚本:
#!/usr/bin/perl
use strict;
use warnings;
open (MESSAGES, "tail -1 /var/adm/messages |" ) || die "failed to open alarms file \n$!\n\a";
open (ERRORLOG, ">>/usr/local/bin/mcdl_errors.log") || die "failed to open errorlog file \n$!\n\a";
my $last_line = `cat /usr/local/bin/line.txt`;
while (my $this_line = <MESSAGES>) {
chomp($this_line);
if ($this_line =~ m/inet|hyena|root/i) {
if ($this_line ne $last_line) {
print "$this_line\n";
print "$last_line\n";
`echo $this_line > /usr/local/bin/line.txt`;
}
}
}
close (MESSAGES);
close (ERRORLOG);
【问题讨论】:
-
也许你需要在 $last_line 上大吃一顿?
-
我尝试过 chomp 但没有帮助。似乎猫和回声之间存在差异
-
从第一个 if 中取出第二个 if ?
-
我很确定 perl 字符串比较有效。
-
您使用的是 Windows 还是 Unix?如果您在 Windows 上工作,可能会出现行尾问题。您应该向我们展示您获得的示例输出。您应该在之前和之后打印带有标记字符的
$this_line和$last_line,以便您可以更轻松地分辨出其中的真正内容(例如print "this = [[$this_line]]\n";)。您应该考虑通过十六进制转储程序运行输出,以便检查字符串中的不可见(控制)字符。
标签: perl