So I'm writing this Perl script to list the contents of a folder and grepping a specific file. When I run my script, files with single digit dates don't work correctly.
foreach $device (@devices){
$ls = `ls -l /mypath/to/$device | grep '.confg'`;
@lsOut = split / /, $ls;
if (@lsOut){
print $lsOut[5] . ' ' . $lsOut[6] . ' ' . $lsOut[7];
}
}
Here is the current output
Jul 29 09:35
Jul 29 09:47
Aug 6
Aug 6
Jul 29 07:32
Jul 29 09:51
Jul 29 09:25
Aug 6
Aug 6
Those Aug 6th dates should also have the time stamp on them.
答案 0 :(得分:1)
查看split
上的联机帮助页。你正在分裂一个空间 - 你正在做的一个常见问题是如果Aug 6
中的文本是对齐的,它将有两个空格,因此你会得到一个不受欢迎的'null'字段。
split
会根据您指定“空间”的方式做一些微妙的不同。 E.g。
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my $example_str = " some text here Aug 6 Jul 27";
my @stuff = split ( / /, $example_str );
print Dumper \@stuff;
my @stuff2 = split ( /\s+/, $example_str );
print Dumper \@stuff2;
my @stuff3 = split ( ' ', $example_str );
print Dumper \@stuff3;
这给出了:
$VAR1 = [
'',
'',
'',
'',
'some',
'text',
'',
'',
'here',
'Aug',
'',
'6',
'Jul',
'27'
];
$VAR1 = [
'',
'some',
'text',
'here',
'Aug',
'6',
'Jul',
'27'
];
$VAR1 = [
'some',
'text',
'here',
'Aug',
'6',
'Jul',
'27'
];
在/ /
上分割会为您提供更多字段,但是有一堆零长度字符串。在/\s+/
上拆分几乎可以提供你想要的东西,但请注意 - 它将“行首”视为一个字段(所以你得到一个空字符)。并且' '
从第一个字符开始为您提供空白分隔。这一般你想要的东西,这就是为什么你只是split;