在我的系统中/var/tmp
,有以下文件:
ls | grep FILE
AAA-FILE.xml
BBB-FILE.xml
使用以下命令我剪切了文件的第一个字,如下所示:
ls /var/tmp | grep FILE.xml | sed "s/.FILE.*//"
我得到:
AAA
BBB
我如何使用 Perl 执行相同的操作以将“AAA”和“BBB”插入到 @RESULTS 中?例如:
@RESULTS=perl syntax ...
答案1
假设你想继续使用现有的命令,你可以这样做
my @results = `ls /var/tmp | grep FILE.xml | sed "s/.FILE.*//"`;
chomp for @results;
chomp 是为了删除尾随的换行符。
无需调用外部命令:
my @results;
opendir DIR,"/var/tmp" or die "Cannot open dir: $!";
for (readdir DIR) {
/(.*)-FILE.*/ or next;
push @results, $1;
}
closedir DIR;
答案2
@RESULTS = grep(s[/var/tmp/(.*)-FILE.xml][$1],</var/tmp/*>);
答案3
@RESULTS = map /(.*)-FILE\.xml$/, <*-FILE.xml>;
答案4
perl -nE'next unless s/-FILE.*//; push state @lines, $_; die @lines if eof;' /var/tmp