Perl 正则表达式用于查找 pid 值,以及来自 Linux 命令结果的特定短语



这段来自linux命令行的代码:

perl -e 'my $serviceInfo = `ssh servername1 /sbin/service service1 status`; $serviceInfo1 =~ /(pid *)/; print $serviceInfo;'

。将结果放入变量$serviceInfo,并打印以下可能的消息:

service1 (pid  22630) is running...
service1 (pid  14039) is stopped...
service1 dead but pid file exists
我需要提取 pid # 和"正在运行",或"已停止"

; 或"死但 pid 文件存在"对于有问题的服务 - 最终在查看进程表时使用变量中的 pid# [以确定作业是否正在运行],以及变量中的每条消息、"正在运行"、"已停止"等,以便根据服务是否正在运行来决定去哪里。我不知道什么时候使用正则表达式、grep vs awk 等。正在浏览正则表达式教程,希望它很快就会"坚持"!

帮助?想法?谢谢!!

尝试做:

perl -e '
    $_ = qx(ssh servername1 /sbin/service service1 status);
    print $1, $2 if /(pids+d+))(s*iss+w+)/
'

输出:

pid  22630 is running
pid  14039 is stopped
pid  14039 is stopped

我希望这就是你所期望的。如果没有,请澄清您的原始帖子。

几个问题。 首先,这个:

$serviceInfo1 =~ /(pid *)/;

与尚未设置的 $serviceInfo 1 进行匹配。 您可能希望与$serviceInfo匹配并将捕获的零件分配给 $serviceInfo 1。 它看起来像这样:

($serviceInfo1) = $serviceInfo =~ /(pid *)/;

或者这个:

$serviceInfo1 = ( $serviceInfo =~ /(pid *)/ )[0];

其次,你的正则表达式正在捕获"pid"和零个或多个空格;要只捕获数字,也要这样做:

my $pid = ( $serviceInfo =~ /(pid *([0-9]+))/ )[0] || '';

您可以像这样捕获状态(死、正在运行或已停止):

my $state = ( $serviceInfo =~ / (dead|(?<= is )running|(?<= is )stopped)/ )[0] || 'unknown';

然后

print "state $state pid $pidn";

最新更新