2015-12-21 4 views
1

У меня очень простой скрипт perl, который я выполняю некоторое регулярное выражение для значения данных, передаваемых по моей команде perl. например:Perl - прочитайте входной канал как одну переменную

cat /tmp/myfile.txt | perl -wnE"say for /my_pattern/gi" 

Обратите внимание, я понимаю, в моей текущей настройки, что опция -n оборачивает свою команду экс:

while(<>){ 
    say for /my_pattern/gi 
} 

... Таким образом, итерация по каждой строке ввода.

Я хотел бы изменить это, когда я могу выполнить регулярное выражение против окончательного вывода моей команды cat. Все примеры, которые я нахожу, показывают обработку обработки строк за строкой.

Любая помощь будет оценена по достоинству.

Update:

Чтобы быть ясно, я имею в виду любой трубе, а не только чтение из файла, как в моем примере (думаю curl, wget, echo, и т.д ...) Я не уверен, что это даже возможно, учитывая тот факт, что исходная команда может быть долговечной или работать в течение «неопределенного» периода времени.

+3

См [? Что такое лучший способ чавкать файл в строку в Perl] (HTTP : //stackoverflow.com/questions/206661/what-is-the-best-way-to-slurp-a-file-into-a-string-in-perl) –

+0

@ HåkonHægland, см. мое обновление. Спасибо за ваш вклад, но, к сожалению, не то, что я ищу. –

+0

* ", где я могу выполнить регулярное выражение против окончательного вывода моей команды cat" * Я не уверен, что это значит. Вы имеете в виду строку * last * данных с каналами? – Borodin

ответ

1

Чтобы ответить на ваш вопрос прямо:

cat aaaa.txt | perl -ne 'BEGIN{local $/};print for /a/gi' 

Чтобы получить то, что ваши вещи работа:

cat aaaa.txt | perl -ne ';print if /aaaa/gi'