如何在Bash脚本中将Bash命令输出传递给多行Perl代码?

时间:2012-02-08 00:46:14

标签: perl bash pipe

对于Bash脚本中的以下管道:

Bash command | perl -ne 'single line perl command' | Another Bash command

Perl命令只能是单行。如果我想编写更复杂的多行Perl命令怎么样?我可以为每个perl命令行使用多个“-e”选项,例如:

perl -n -e 'command line 1' -e 'command line 2' -e 'command line 3'

或者我可以为多行Perl代码使用“Here Document”(在这种情况下,仍然可以指定perl选项,例如“-n”。)?

如果可以使用“Here Document”,任何人都可以通过示例说明如何使用它。

提前感谢任何建议。

2 个答案:

答案 0 :(得分:6)

如果您的Perl脚本太长而无法在一行上控制(使用分号分隔Perl语句),那么bash非常乐意将您的单引号参数扩展到您需要的多行:

Bash-command |
perl -ne 'print something_here;
          do { something_else } while (0);
          generally("avoid single quotes in your Perl!");
          say q{Here is single-quoted content in Perl};
         ' |
Another-Bash-Command

'perldoc perlrun'手册也说:

  

-e commandline

     

可用于输入一行程序。如果给出-e,Perl将不会在参数列表中查找文件名。可以给出多个-e命令来构建多行脚本。确保在正常程序中使用分号。

     

-E commandline

     

表现得像-e,除了它隐式启用所有可选功能(在主编译单元中)。

所以你也可以这样做:

Bash-command |
perl -n -e 'print something_here;' \
        -e 'do { something_else } while (0);' \
        -e 'generally("avoid single quotes in your Perl!");' \
        -e 'say q{Here is single-quoted content in Perl};' |
Another-Bash-Command

如果脚本比20行(大概在10到50之间,有些根据选择)大,那么可能是时候将Perl脚本分离到自己的文件中并运行它。

答案 1 :(得分:4)

对于多行Perl,您只需要用分号分隔命令,而不是传递多个-e调用。例如:

perl -n -e 'command line 1; command line 2;'

(虽然我通常不会说Perl块本身就是“命令行”)。