如何将Bash Shell命令的输出逐行传递给Perl进行Regex处理?

时间:2012-02-07 09:58:08

标签: perl bash pipe

我有一些Bash Shell命令的输出数据。输出以“\ n”或“\ 0”逐行分隔。我想知道有没有办法将输出传递到Perl并在Perl中逐行处理数据(就像将输出汇总到awk一样,但在我的情况下它是在Perl上下文中。)。我想命令可能是这样的:

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

假设我想在“逐行”的基础上将所有“:”字符替换为“@”字符(不是全局替换,我可以使用条件,例如奇数或偶数行来确定当前行应该有替代。),那么我怎么能实现这一点。

2 个答案:

答案 0 :(得分:25)

请参阅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一样。

答案 1 :(得分:8)

命令行开关-p(如果你想自动打印)或-n(如果你不想要它)将做你想要的。行内容在$ _ so:

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

将是一个解决方案。通常,您想要阅读'<>' (钻石)操作员,这是非oneliners的方式。