我正在运行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;
}
答案 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];