试图从perl中的一行中获取单个字符串

时间:2013-11-19 12:46:19

标签: perl

我正在运行pgrep命令并尝试从pgrep命令的输出中获取字符串。     pgrep -fl bipbroker(这是进程名称)给出输出     (这是pgrep命令的输出):15334 bipbroker Broker1。 我希望从此输出中打印出Broker1。我正在使用拆分,但它似乎不起作用。

我的代码:

#!/usr/bin/perl
use strict;
use warnings;
my $Broker;
open my $command_output, "|-", "pgrep -fl bipbroker";
while (my $command = < $command_output > ) {
    $Broker= split(/' '/, $command, [ -1]);
    print $Broker;
}

3 个答案:

答案 0 :(得分:1)

如果你想从你的命令中读取,那么

open my $command_output, "-|", "pgrep -fl bipbroker";

代替,

open my $command_output, "|-", "pgrep -fl bipbroker";

答案 1 :(得分:0)

您似乎错误地使用了split

您想要拍摄分割的最后一个元素。

你可以这样做两行:

@split_line = split /\s+/, $command;
$Broker = $split_line[-1];

在一行中你会这样做:

$Broker = (split /\s+/, $command)[-1];

此外,作为mpapec answered,您似乎错误地打开了管道。

您写道:

open my $command_output, "|-", "pgrep -fl bipbroker";

将您写入<$command_output>的任何内容发送到pgrep -fl bipbroker。你想做相反的事情。您希望将pgrep传递给您可以读取的管道,如下所示:

open my $command_output, "pgrep -fl bipbroker|";

答案 2 :(得分:0)

编辑:我刚刚测试了整个脚本,因为我不确定整个开放的东西。事实证明,这根本不起作用,你没有获得实际的字符串。它可能是这样做的,但我不太熟悉&lt;&gt;的许多用途。所以我建议不要潜水太深,只需使用:

my $Broker;
my @command_output = `pgrep -fl bipbroker`;
for my $command (@command_output) 
{ 
    #loop (see below)
}

此外,您在标量上下文中调用split。我想最后的-1应该给你最后一个元素,就像它用作数组的索引一样。但是split有一个三参数形式,如果最后一个是负数,它只是意味着尽可能地分裂。如果使用0或什么都没有在末尾跳过空的分隔符,而不是。

/' '/也可能不是你想要的。它被视为正则表达式并查找实际'。您应该只使用/ /这是“在开头切掉任何空格,然后按任意数量的大于0的空格分割”的快捷方式。

所以你可能想要使用:

@Broker= split(/ /, $command);
print $Broker[-1];