【发布时间】:2022-01-28 05:05:26
【问题描述】:
我经常需要运行一些 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 one-liners”着迷?它们在工作时很棒,但它们不是强制性的;多线也可以。
-
@JonathanLeffler 嗯..这不是关于一条线与两条线。我可以用多个
-e制作多线脚本。但它是关于不使用脚本源制作不必要的文件。我很多次使用oneliners,仅仅是因为它们是直接从命令行执行一些强大的事情而无需编辑脚本文件的快速方法......也许对你来说可以为2行脚本制作一个脚本文件 - 对我来说是更快地将其直接写入命令行... ;) :) -
@Jonathan,我管理着数千台服务器。我可以粘贴到 ssh 中的单行代码,可以粘贴到我正在传递一些日志的一系列管道命令中,可以在聊天中快速、充分地与某人交流,等等。我所做的在 bash 历史中更为明显而不是两步 vi/GET--./mysecretskript。有了单线,我很少被引诱离开我的真正任务。当其他任何东西可能不需要它们时,我很少会尝试将 Perl 模块安装到随机服务器上。而且我很少发现我已经建立了一个巨大的库,其中包含不再有用、未记录、名称神秘的脚本。
-
Perl 很谦虚。看看
perldoc perlrun,或者perldoc perlvar的一些奇怪的成员。这不是一个社区认为它太酷而不能在命令行中使用的语言。 (我猜那些人只是使用了很多 bash、sed 和 awk。)
标签: perl