具有ARGV的perl线路模式oneliner
发布时间:2020-12-15 23:20:31 所属栏目:大数据 来源:网络整理
导读:我经常需要运行一些Perl单行程来进行快速数据操作,比如 some_command | perl -lne 'print if /abc/' 从管道读取,我不需要围绕命令arg文件名循环.我怎样才能实现下一个? some_command | perl -lne 'print if /$ARGV[0]/' abc 这给出了错误: Can't open abc:
我经常需要运行一些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或所有模式的模式可能更有意义,而不是为每个模式执行相同的命令. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |