Perl grep 获取第 1 列中的值

Perl grep for a value in column 1

我在 Perl 中进行的系统调用如下:

@filesystems = `/nas/bin/nas_fs -query:TypeNumeric==1:IsRoot==False -fields:RWServers,ROServers,Name,RWMountpoint, -format:%L:%L:%s:%s\\n`;

效果很好。它为我提供了所需的信息:

server_5::fs_pipeline_950155:/root_vdm_30/fs_pipeline_95015    
:server_7:fs_nfs_esx_wks_vms:    
server_7::fs_ovid3:/fs_ovid3

但是,如果我想真的只用第 1 列中有值的条目填充 @filesystems(即第一个值 ... 第 1 行和上面示例中的 3),我不确定如何实现这一点。 awk -F 通过管道似乎不起作用。

您可以在 Perl 本身中执行此操作:

my @temp = `/nas/bin/nas_fs -query:TypeNumeric==1:IsRoot==False -fields:RWServers,ROServers,Name,RWMountpoint, -format:%L:%L:%s:%s\\n`;
my @filesystems = grep { !/^:/ } @temp;

这会从列表中过滤掉所有以冒号开头的条目。

或者,您可以调用另一个进程:

my @filesystems = `/nas/bin/nas_fs <args> | grep -v '^:'`;

grep -v returns 仅不匹配模式的行,因此排除以冒号开头的行。

填充 @filesystems 后,您可以在脚本中执行此操作:

# Removes blank lines and lines starting with :
@filesystems = grep { !/(^:|^\s*$/ } @filesystems;