Regex 匹配字符串结尾的Perl reg表达式不起作用

Regex 匹配字符串结尾的Perl reg表达式不起作用,regex,perl,Regex,Perl,不确定我的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/2

不确定我的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

字符串结尾之前似乎有一些空格/制表符(
chomp()
仅删除换行符,而不删除其他空格字符)

允许那些尾随的空白字符(并可能通过使用a避免类似
Blog
的匹配):


字符串结尾之前似乎有一些空格/制表符(
chomp()
仅删除换行符,而不删除其他空格字符)

允许那些尾随的空白字符(并可能通过使用a避免类似
Blog
的匹配):


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.
}

  • 从技术上讲,无论
    $/
    的值是多少。但是
    $/
    从包含换行符开始

  • 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.
    }
    

  • 从技术上讲,无论
    $/
    的值是多少。但是
    $/
    从包含换行符开始

  • 换行前会有空格吗?请尝试
    /log\s*$/
    ,看看错误是否仍然存在。@TimPietzcker:成功了。但是为什么在chomp之后还会有空格呢?据我所知,
    chomp()
    只删除换行符,而不删除其他空格字符。具体来说,
    chomp
    会删除
    $/
    的值,默认情况下这是换行符。换行符之前会有空格吗?请尝试
    /log\s*$/
    ,看看错误是否仍然存在。@TimPietzcker:成功了。但是为什么在chomp之后还会有空格。据我所知,
    chomp()
    只删除换行符,而不删除其他空格字符。具体地说,
    chomp
    删除了
    $/
    的值,默认情况下这是换行符。