我有下面的代码片段来读取命令输出并将其输入数组 (@ret)。
my @ret = `$cmd`;
chomp @ret;
foreach my $line (@ret)
{
print $line;
}
这是 $CMD 输出,同样的内容被写入@ret 数组。
(154) "1.T" Oct 15, 2020 7:05 AM
(159) "1.S" Oct 14, 2020 7:03 AM
(161) "1.R" Oct 13, 2020 7:03 AM
(163) "1.Q" Oct 11, 2020 7:06 AM
(164) "1.P" Oct 10, 2020 7:06 AM
(166) "1.N" Oct 8, 2020 1:53 AM
(167) "1.K" Oct 5, 2020 7:06 AM
(168) "1.J" Oct 4, 2020 4:44 PM
(169) "1.I" Oct 3, 2020 3:54 PM
(170) "1.H" Oct 3, 2020 7:02 AM
不确定,如何从此输出中提取用双引号引起来的第二列。有人可以帮助或提供一些意见。 谢谢。
最佳答案
您可以通过将正则表达式直接应用于数组来做到这一点:
my @ret = `$cmd`;
s/(^[^"]+")|("[^"]+)//g for @ret;
基本上,正则表达式会删除第一个双引号之前的所有内容(包括双引号本身),以及最后一个双引号之后的所有内容(包括在内)。
考虑以下演示:
my @ret = (
q/(154) "1.T" Oct 15, 2020 7:05 AM/,
q/(159) "1.S" Oct 14, 2020 7:03 AM/,
q/(161) "1.R" Oct 13, 2020 7:03 AM/,
q/(163) "1.Q" Oct 11, 2020 7:06 AM/,
q/(164) "1.P" Oct 10, 2020 7:06 AM/,
q/(166) "1.N" Oct 8, 2020 1:53 AM/,
q/(167) "1.K" Oct 5, 2020 7:06 AM/,
q/(168) "1.J" Oct 4, 2020 4:44 PM/,
q/(169) "1.I" Oct 3, 2020 3:54 PM/,
q/(170) "1.H" Oct 3, 2020 7:02 AM/,
);
s/(^[^"]+")|("[^"]+)//g for @ret;
print "$_\n" for @ret;
产量:
1.T
1.S
1.R
1.Q
1.P
1.N
1.K
1.J
1.I
1.H
https://stackoverflow.com/questions/64418037/
相关文章:
javascript - 我怎样才能解构一个 React Prop 并仍然访问其他 Prop ?
c# - 如何在 ASP Core 的静态类中使用 "IWebHostEnvironment"
vim - 如何在没有重新映射的情况下仅使用一个命令在 Neovim 的新选项卡中打开终端?
python - Pandas 数据框拆分并获取列表的最后一个元素
ios - 从初始化器返回而不初始化所有存储的属性 - SwiftUI 绑定(bind)错误
java - 首次安装应用程序时无法解析 android 11 中的 com.android.cam