如何将Bash Shell命令的输出逐行传输到Perl进行正则表达式处理?

26

我有一些来自Bash Shell命令的输出数据。每行用"\n"或"\0"分隔。我想知道是否有办法将输出导入Perl中,并在Perl中逐行处理数据(就像将输出导入awk一样,但在我的情况下是在Perl上下文中)。我想这个命令可能是这样的:

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

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

2个回答

35

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


13
命令行开关 -p(如果您想要自动打印)或 -n(如果您不想要)将实现您所需的功能。行内容在 $_ 中,因此:
perl -pe's/\./\@/g' 会是一个解决方案。通常,您需要阅读一下“<>”(钻石)运算符的相关信息,这是非单行程序的方法。

2
如果您在命令行上编写整个程序,则还需要使用-e标志。否则,它将无法找到名为"s/./@/g"的Perl脚本。 - SkryneSaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接