【问题标题】:How to pipe Bash Shell command's output line by line to Perl for Regex processing?如何将 Bash Shell 命令的输出逐行传输到 Perl 以进行正则表达式处理?
【发布时间】:2025-12-08 17:55:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl bash pipe


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      将是一个解决方案。通常,您需要阅读“”(菱形)运算符,这是非单行者的最佳选择。

      【讨论】:

      • 如果您在命令行上编写整个程序,这也需要 -e 标志。 (否则将无法找到名为“s/\./\@/g”的 Perl 脚本)