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

标签 linux perl

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

相关文章:

perl - 如何调试由 Module::Starter 制作的模块?

perl - 使用逻辑定义的运算符将数组映射到散列

linux - 管理 Shell 任务

linux - Linux 中 'n' 进程之间的文件访问(读/写)同步

python - 为什么向上和向下箭头命令在 Python 命令行解释器中不起作用?

perl - 如何在 Perl 中向字符串添加空字符?

shell - 在文件顶部附加文本

mysql - Perl 在脚本之间传递数据而不使用查询字符串

php - PHP和Shell中return后主进程如何运行

java与NFC通信(PC/SC)