В таком случае вы действительно используете однострочник. Недавно я написал код, который я использую, среди прочего, для получения вывода, в котором перечислены структуры каталогов, присутствующие в архиве .zip (по одной записи в каждой строке). Таким образом, используя этот вывод в качестве примера вывода команды, который мы хотели бы отфильтровать, мы могли бы поместить канал и затем использовать perl с флагами -n -e
для фильтрации входящих данных (и / или делать другие вещи с ним):
[command_producing_text_output] | perl -MFile::Path -n -e \
"BEGIN{@PTM=()} if (m{^perl/(bin|lib(?!/site))}) {chomp;push @PTM,$_}" ^
-e "END{@WDD=mkpath (\@PTM,1);" ^
-e "printf qq/Created %u dirs to reflect part of structure present in the .ZIP file\n/, scalar(@WDD);}"
используемый синтаксис оболочки, в том числе: цитирование perl-кода и экранирование строк новой строки, отражает использование CMD.exe в консолях, подобных Windows NT. Если вам нужно, мысленно заменить
«^» с «\» и «с» в соответствующих местах.
Вышеуказанная строка добавляет только имена каталогов, начинающиеся с "perl / bin" или
"perl / lib (не сопровождается" / site "); затем он создает эти каталоги.
с (пустым) деревом, которое вы можете использовать для любых злых целей, которые пожелаете.
Суть в том, чтобы проиллюстрировать, что доступны флаги (-n
, -p
) для
разрешите perl циклически проходить по каждой входной записи (строке), и то, что вы можете сделать, не ограничено с точки зрения сложности.