Как передать вывод команды Bash Shell строка за строкой в ​​Perl для обработки Regex? - PullRequest
19 голосов
/ 07 февраля 2012

У меня есть некоторые выходные данные некоторых команд Bash Shell. Выходные данные разделяются строка за строкой с \ n или \ 0. Я хотел бы знать, есть ли какой-либо способ передать вывод в Perl и обработать данные построчно в Perl (точно так же, как передать вывод в awk, но в моем случае это в контексте Perl.). Я полагаю, что команда может быть что-то вроде этого:

Bash Shell command | perl -e 'some perl commands' | another Bash Shell command

Предположим, что я хочу заменить все символы ":" на символы "@" на основе "строка за строкой" (не глобальная замена, я могу использовать условие, например, нечетную или четную строку, чтобы определить, является ли текущая строка должна быть замена или нет.) тогда как мне этого добиться.

Ответы [ 2 ]

25 голосов
/ 07 февраля 2012

См. perlrun .

perl -lpe's/:/@/g'      # assumes \n as input record separator
perl -0 -lpe's/:/@/g'   # assumes \0 as input record separator

perl -lne'if (0 == $. % 2) { s/:/@/g; print; }' # modify and print even lines

Да, Perl может появиться в любом месте конвейера, как и awk.

8 голосов
/ 07 февраля 2012

Ключ командной строки -p (если вы хотите автоматическую печать) или -n (если вы этого не хотите) будет делать то, что вы хотите. Содержимое строки в $ _ так:

perl -pe's/\./\@/g'

было бы решением. Как правило, вы хотите прочитать об операторе '<>' (ромб), который является подходом для тех, кто не принадлежит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...