据我所知(Perl对我来说很新)Perl可以用来编写Unix命令行的脚本.我想要做的是运行(硬编码)命令行调用,并搜索这些调用的输出以进行RegEx匹配.有没有办法在Perl中做到这一点?怎么样?
编辑:这里的顺序是: - 另一个程序. - 针对其输出运行正则表达式.
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
详细信息,请参阅.
如其他人所提到的,你可以在没有Perl的情况下逃脱.但是,如果您需要一些Perl功能,例如扩展的正则表达式功能或其他文本操作,您可以输出输出perl
然后执行您需要的操作.Perl的-e
开关让你在命令行上指定Perl程序:
command | perl -ne 'print if /.../'
您可以将其他几个开关传递给perl,以使其在命令行上非常强大.这些都记录在perlrun中.另请参阅Randal Schwartz的Unix Review专栏中的一些文章,特别是他的第一篇文章.你也可以谷歌Perl一个衬垫找到很多例子.