具有ARGV的perl线路模式oneliner

前端之家收集整理的这篇文章主要介绍了具有ARGV的perl线路模式oneliner前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我经常需要运行一些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 ONE-LINER命令行参数的“内部”而不将它们解释为文件名?

解决方法

一些解决方

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或所有模式的模式可能更有意义,而不是为每个模式执行相同的命令.

猜你在找的Perl相关文章