加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读