我有一些Bash Shell命令的输出数据。输出以“\ n”或“\ 0”逐行分隔。我想知道有没有办法将输出传递到Perl并在Perl中逐行处理数据(就像将输出汇总到awk一样,但在我的情况下它是在Perl上下文中。)。我想命令可能是这样的:
Bash Shell command | perl -e 'some perl commands' | another Bash Shell command
假设我想在“逐行”的基础上将所有“:”字符替换为“@”字符(不是全局替换,我可以使用条件,例如奇数或偶数行来确定当前行应该有替代。),那么我怎么能实现这一点。
答案 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的方式。