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

use*_*812 20 bash perl pipe

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

Bash Shell command | perl -e 'some perl commands' | another Bash Shell command
Run Code Online (Sandbox Code Playgroud)

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

dax*_*xim 26

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
Run Code Online (Sandbox Code Playgroud)

是的,Perl可能出现在管道中的任何地方,就像awk一样.


Ali*_*orm 8

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

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

将是一个解决方案.通常,您希望阅读"<>"(钻石)运算符,这是非oneliner的方法.

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