我经常需要运行一些Perl单行程来进行快速数据操作,比如
some_command | perl -lne 'print if /abc/'
从管道读取,我不需要围绕命令arg文件名循环.我怎样才能实现下一个?
some_command | perl -lne 'print if /$ARGV[0]/' abc
这给出了错误:
Can't open abc: No such file or directory.
我明白’-n’可以做到
while(<>) {.... }
在我的程序周围,<>把args作为文件名,但每次做下一次都有点不切实际
#/bin/sh while read line do some_command | perl -lne 'BEGIN{$val=shift @ARGV} print if /$val/' "$line" done
解决方法
一些解决方案
perl -e'$p = shift; while (<>) { print if /$p/ }' pat perl -e'$p = shift; print grep /$p/,<>' pat # Inefficient. perl -ne'BEGIN { $p = shift } print if /$p/' pat PAT=pat perl -ne'print if /$ENV{PAT}/'
当然,创建一个ORing或所有模式的模式可能更有意义,而不是为每个模式执行相同的命令.