不确定我的perl脚本有什么问题。无法使用正则表达式
匹配行尾[rmdev01@inches-rmdev01 SISPortal]$ forever logs
info: Logs for running Forever processes
data: script logfile
data: [0] server /home/rmdev01/.forever/WusC.log
data: [1] Server /home/rmdev01/.forever/2hai.log
脚本:
[rmdev01@inches-rmdev01 SISPortal]$ cat forever.pl
#! /usr/bin/perl
@logs=`forever logs`;
chomp(@logs);
foreach my $log (@logs)
{
print "checking log at end of string $log\n";
if ($log =~ /log$/)
{
print "$log\n";
}
}
脚本输出:
[rmdev01@inches-rmdev01 SISPortal]$ ./forever.pl
checking log at end of string info: Logs for running Forever processes
checking log at end of string data: script logfile
checking log at end of string data: [0] server /home/rmdev01/.forever/WusC.log
checking log at end of string data: [1] Server /home/rmdev01/.forever/2hai.log
答案 0 :(得分:3)
在字符串结尾之前似乎有一些空格/制表符(chomp()
只删除换行符,但没有其他空白字符。)
允许那些尾随空白字符(并且可能使用word boundary anchor避免像Blog
这样的匹配):
if ($log =~ /\blog\s*$/)
答案 1 :(得分:1)
chomp
只删除换行符 [1] ,而您显然有其他尾随空格(例如回车符)。
s/\s+\z//
删除所有尾随空格,因此使用它通常比使用chomp
更好的实践。
#!/usr/bin/perl
use strict;
use warnings qw( all );
for (`forever logs`) {
s/\s+\n//;
print if /log$/; # Or /\blog$/ as Tim Pietzcker suggested.
}
$/
的价值是多少。但$/
开始时包含换行符。