我想在Perl脚本中使用正则表达式在文件中搜索一行.
假设它在安装了grep的系统中,最好是:
grep
通过open()
命令调用外部
open()
文件直接使用while
循环和if ($line =~ m/regex/)
?
Michael Borg.. 9
在现代Perl实现中,正则表达式代码应该与grep一样快,但是如果你关注性能,为什么不简单地尝试一下呢?从代码清洁度和健壮性的角度来看,调用外部命令行工具绝对不是好事.
在现代Perl实现中,正则表达式代码应该与grep一样快,但是如果你关注性能,为什么不简单地尝试一下呢?从代码清洁度和健壮性的角度来看,调用外部命令行工具绝对不是好事.
您不需要open
显式文件.
my $regex = qr/blah/; while (<>) { if (/$regex/) { print; exit; } } print "Not found\n";
由于你似乎关注性能,我让匹配并print
使用默认$_
提供的默认值<>
,这是一个稍微快一点的东西.在正常的生产代码中,
while (my $line = <>) { if ($line =~ /$regex/) { print $line; exit; } }
会优先考虑.
编辑: 这假定要检查的文件是在命令行上给出的,我刚刚注意到你没有说明在你的情况下适用.
使用grep时要注意的一件事:在最近的Linux发行版中,如果你的LANG环境变量定义了UTF-8类型(例如我的是LANG = en_GB.UTF-8)那么grep,sed,sort和可能是一堆其他文本处理实用程序运行速度大约慢10倍.如果您正在进行性能比较,请注意这一点.我现在将我的grep命令别名为:
LANG= LANGUAGE= /bin/grep
编辑:实际上,它更像是慢100倍