ale*_*ood 6 unix perl command-line
据我所知(Perl对我来说很新)Perl可以用来编写Unix命令行的脚本.我想要做的是运行(硬编码)命令行调用,并搜索这些调用的输出以进行RegEx匹配.有没有办法在Perl中做到这一点?怎么样?
编辑:这里的顺序是: - 另一个程序. - 针对其输出运行正则表达式.
eph*_*ent 10
my $command = "ls -l /";
my @output = `$command`;
for (@output) {
print if /^d/;
}
Run Code Online (Sandbox Code Playgroud)
所述qx//准引用运算符(其反引号是快捷方式)从壳语法被盗:运行字符串作为新的外壳的命令,并返回它的输出(作为字符串或列表,这取决于上下文).详情perlop请见.
你也可以打开一个管道:
open my $pipe, "$command |";
while (<$pipe>) {
# do stuff
}
close $pipe;
Run Code Online (Sandbox Code Playgroud)
这允许您(a)避免立即将整个命令的输出收集到内存中,并且(b)让您更好地控制运行命令.例如,您可以避免shell解析命令:
open my $pipe, '-|', @command, '< single argument not mangled by shell >';
Run Code Online (Sandbox Code Playgroud)
有关perlipc详细信息,请参阅.
如其他人所提到的,你可以在没有Perl的情况下逃脱.但是,如果您需要一些Perl功能,例如扩展的正则表达式功能或其他文本操作,您可以输出输出perl然后执行您需要的操作.Perl的-e开关让你在命令行上指定Perl程序:
command | perl -ne 'print if /.../'
Run Code Online (Sandbox Code Playgroud)
您可以将其他几个开关传递给perl,以使其在命令行上非常强大.这些都记录在perlrun中.另请参阅Randal Schwartz的Unix Review专栏中的一些文章,特别是他的第一篇文章.你也可以谷歌Perl一个衬垫找到很多例子.