arrays - 如何使用 Perl 剪切数组中字符串的第二列

我有下面的代码片段来读取命令输出并将其输入数组 (@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 数据框拆分并获取列表的最后一个元素

java - cf 推送失败 Java 版本不匹配

ios - 从初始化器返回而不初始化所有存储的属性 - SwiftUI 绑定(bind)错误

java - 首次安装应用程序时无法解析 android 11 中的 com.android.cam

haskell - 获取haskell中字符串的所有旋转

javascript - Angular 子组件无法识别输入更改

delphi - 如何在 delphi 7 中使用 setlocaltime?