1

В моем /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 ...

5 ответов5

3

Предполагая, что вы хотите продолжать использовать существующую команду, вы можете сделать

my @results = `ls /var/tmp | grep FILE.xml | sed "s/.FILE.*//"`;
chomp for @results;

проблема в том, чтобы избавиться от завершающего символа новой строки.

Не прибегая к вызову внешних команд:

my @results;
opendir DIR,"/var/tmp" or die "Cannot open dir: $!";
for (readdir DIR) {
    /(.*)-FILE.*/ or next;
    push @results, $1;
}
closedir DIR;
2
@RESULTS = map /(.*)-FILE\.xml$/, <*-FILE.xml>;
2

@RESULTS = grep(s[/var/tmp/(.*)-FILE.xml][$1],</var/tmp/*>);

1
@RESULTS = map m#/var/tmp/(.*)-FILE.xml#, </var/tmp/*-FILE.xml>;
1
perl -nE'next unless s/-FILE.*//; push state @lines, $_; die @lines if eof;' /var/tmp

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .