我需要一些帮助,我有一个命令的输出,只需要从输出中提取时间,即“10:57:09
”。
命令是:tail -f/var/log/sms
命令输出:
Thu 2016/08/04 10:57:09 gammu-smsd[48014]: Read 0 messages
我如何在 perl 中执行此操作并将结果放入变量中
谢谢
最佳答案
通常,我们希望您在给出答案之前展示一些尝试自己解决问题的证据。
您使用匹配运算符 (m/.../
) 来检查字符串是否与正则表达式匹配。 m
通常被省略,因此您会看到它写成 /.../
。默认情况下,它与变量 $_
匹配,但您可以使用绑定(bind)运算符 =~
更改它。如果正则表达式包含括号 ((...)
),则正则表达式的该部分匹配的内容将存储在 $1
(和 $2
, $3
等用于后续的括号组)。当在列表上下文中进行评估时,匹配运算符也会返回那些“捕获”的值。
检查匹配运算符的返回值始终是个好主意,因为如果匹配不成功,您几乎肯定会想要采取不同的操作。
参见 perldoc perlop有关匹配运算符和 perldoc perlre 的更多详细信息有关 Perl 的正则表达式支持的更多详细信息。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
$_ = 'Thu 2016/08/04 10:57:09 gammu-smsd[48014]: Read 0 messages';
if (my ($time) = /(\d\d:\d\d:\d\d)/) {
say "Time is '$time'";
} else {
say 'No time found in string';
}
并从您的外部进程获取数据...
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
open my $tail_fh, 'tail -f /var/log/sms |' or die $!;
while (<$tail_fh>) {
if (my ($time) = /(\d\d:\d\d:\d\d)/) {
say "Time is '$time'";
} else {
say 'No time found in string';
}
}
关于linux - 如何在 Perl 中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761792/