我正在尝试从命令“dspmq”的输出中提取 AAA 和 BBB。
$dspmq
<- 此命令的输出为 -->
QMNAME(AAA) STATUS(Running)
QMNAME(BBB) STATUS(Running)
但它不适用于以下代码。
perl -e 'use Data::Dumper qw(Dumper);my @qmgrlist = `dspmq`;$size = @qmgrlist;foreach my $i (@qmgrlist){my @temp1 = split /QMNAME\(/, $i;print @temp1;}'
AAA) STATUS(Running)
BBB) STATUS(Running)
我能够截断 "QMNAME("
但无法截断 AAA
和 BBB
右侧的那些。基本上我想获取 "QMNAME("
和立即 ")"
之间的字符串。请协助。
最佳答案
我认为正则表达式方法比这里的 split()
更好,但是您可以通过在括号上拆分并获取返回列表中的第二项来使用 split()
.
for (@qmgrlist) {
say +(split /[()]/)[0];
}
以及关于使用命令行选项来运行此代码的简短说明。如果您 a) 将 qspmq
的输出通过管道传输到代码中,b) 使用 -n
一次处理一条记录,则可以使其变得更简单。
$ perl -nE 'say +(split /[()]/)[1]' `dspmq`
还有-M
来加载模块(例如-MData::Dumper
),但您似乎不再使用Data::Dumper。
关于string - Perl 无法截断字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59212822/