У меня есть Perl-программа, которая принимает STDIN (переданный из другой команды bash).Вывод команды bash довольно большой, около 200 строк.Я хочу взять весь ввод (несколько строк) и передать его в однострочный скрипт Perl, но пока ничего из того, что я пробовал, не сработало.И наоборот, если я использую следующий perl (файл .pl):
#!/usr/bin/perl
use strict;
my $regex = qr/{(?:\n|.)*}(?:\n)/p;
if ( <> =~ /$regex/g ) {
print "${^MATCH}\n";
}
и выполняю команду bash следующим образом:
<bash command> | perl -0777 try_m_1.pl
Это работает.Но, как однострочный, он не работает с той же командой regex / bash.Результат команды print
- ничто.Я пробовал это так:
<bash command> | perl -0777 -e '/{(?:\n|.)*}(?:\n)/pg && print "$^MATCH";'
и это:
<bash command> | perl -0777 -e '/{(?:\n|.)*}(?:\n)/g; print "$1\n";'
И еще куча других вещей, слишком много, чтобы перечислить их все.Я новичок в Perl и хочу использовать его только для получения вывода регулярных выражений из текста.Если есть что-то лучше, чем Perl, чтобы сделать это (я так понимаю, прочитав, что sed не будет работать для этого?), Не стесняйтесь предлагать.
Обновление: на основе ответа @zdim, я попробовал следующее, чтосработало:
<bash command> | perl -0777 -ne '/(\{(?:\n|.)*\}(?:\n))/s and print "$1\n"'
Полагаю, мое регулярное выражение нужно было обернуть в ()
, а фигурные скобки {
нужно экранировать.