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

如何快速找到与正则表达式匹配的文件的第一行?

如何解决《如何快速找到与正则表达式匹配的文件的第一行?》经验,为你挑选了3个好方法。

我想在Perl脚本中使用正则表达式在文件中搜索一行.

假设它在安装了grep的系统中,最好是:

grep通过open()命令调用外部

open()文件直接使用while循环和if ($line =~ m/regex/)

Michael Borg.. 9

在现代Perl实现中,正则表达式代码应该与grep一样快,但是如果你关注性能,为什么不简单地尝试一下呢?从代码清洁度和健壮性的角度来看,调用外部命令行工具绝对不是好事.



1> Michael Borg..:

在现代Perl实现中,正则表达式代码应该与grep一样快,但是如果你关注性能,为什么不简单地尝试一下呢?从代码清洁度和健壮性的角度来看,调用外部命令行工具绝对不是好事.



2> Dave Sherohm..:

您不需要open显式文件.

my $regex = qr/blah/;
while (<>) {
  if (/$regex/) {
    print;
    exit;
  }
}
print "Not found\n";

由于你似乎关注性能,我让匹配并print使用默认$_提供的默认值<>,这是一个稍微快一点的东西.在正常的生产代码中,

while (my $line = <>) {
  if ($line =~ /$regex/) {
    print $line;
    exit;
  }
}

会优先考虑.

编辑: 这假定要检查的文件是在命令行上给出的,我刚刚注意到你没有说明在你的情况下适用.



3> Adrian Pronk..:

使用grep时要注意的一件事:在最近的Linux发行版中,如果你的LANG环境变量定义了UTF-8类型(例如我的是LANG = en_GB.UTF-8)那么grep,sed,sort和可能是一堆其他文本处理实用程序运行速度大约慢10倍.如果您正在进行性能比较,请注意这一点.我现在将我的grep命令别名为:

LANG= LANGUAGE= /bin/grep

编辑:实际上,它更像是慢100倍

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