gpt4 book ai didi

linux - 如何在 Perl 中使用正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:42 25 4
gpt4 key购买 nike

我需要一些帮助,我有一个命令的输出,只需要从输出中提取时间,即“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com