当前位置:  开发笔记 > 编程语言 > 正文

如何在命令行上使用Perl来搜索其他程序的输出?

如何解决《如何在命令行上使用Perl来搜索其他程序的输出?》经验,为你挑选了2个好方法。

据我所知(Perl对我来说很新)Perl可以用来编写Unix命令行的脚本.我想要做的是运行(硬编码)命令行调用,并搜索这些调用的输出以进行RegEx匹配.有没有办法在Perl中做到这一点?怎么样?

编辑:这里的顺序是: - 另一个程序. - 针对其输出运行正则表达式.



1> ephemient..:
my $command = "ls -l /";
my @output = `$command`;
for (@output) {
    print if /^d/;
}

所述qx//准引用运算符(其反引号是快捷方式)从壳语法被盗:运行字符串作为新的外壳的命令,并返回它的输出(作为字符串或列表,这取决于上下文).详情perlop请见.

你也可以打开一个管道:

open my $pipe, "$command |";
while (<$pipe>) {
    # do stuff
}
close $pipe;

这允许您(a)避免立即将整个命令的输出收集到内存中,并且(b)让您更好地控制运行命令.例如,您可以避免shell解析命令:

open my $pipe, '-|', @command, '< single argument not mangled by shell >';

有关perlipc详细信息,请参阅.



2> brian d foy..:

如其他人所提到的,你可以在没有Perl的情况下逃脱.但是,如果您需要一些Perl功能,例如扩展的正则表达式功能或其他文本操作,您可以输出输出perl然后执行您需要的操作.Perl的-e开关让你在命令行上指定Perl程序:

command | perl -ne 'print if /.../'

您可以将其他几个开关传递给perl,以使其在命令行上非常强大.这些都记录在perlrun中.另请参阅Randal Schwartz的Unix Review专栏中的一些文章,特别是他的第一篇文章.你也可以谷歌Perl一个衬垫找到很多例子.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有