使用perl编程匹配模式的grep行

时间:2013-12-24 06:11:39

标签: perl

我想从一个大文件grep模式。但是使用grep它非常慢并且grep模式也不区分大小写。所以,我读到perl文件读取速度更快。请有人以电子邮件的方式告诉我perl。

感谢。

3 个答案:

答案 0 :(得分:2)

  

cat File1.txt File2.txt | grep -in“exception”| grep -v“pattern”

在perl:

perl -ne 'print "$.:$_" if /exception/i and !/pattern/' File1.txt File2.txt

或没有cat

grep -in "exception" File1.txt File2.txt | grep -v "pattern"

答案 1 :(得分:0)

grep -i 'pattern' file - > perl -lne 'print if(/pattern/i)' file

grep -vi 'pattern' file - > perl -lne 'print unless(/pattern/i)' file

如果您想要所有包含行数的内容,请替换print 在上面的命令中使用print "$. $_"

答案 2 :(得分:0)

我怀疑Perl会在这方面给你带来性能优势。 grep实用程序是用C编写的预编译二进制文件; Perl是一种解释型语言,具有额外的性能开销,例如GNU grep没有。如果grep很慢,瓶颈很可能是文件从磁盘加载到主内存中。文件有多大?

仅供参考,grep有标志,可以使用不区分大小写的匹配和Perl样式的正则表达式语法。

% grep -i 'abc' <file>    # Matches abc, ABC, aBc, etc.
% grep -i 'ab\|cd' <file> # Matches ab or cd
% grep -P 'ab|cd' <file>  # Matches ab or cd

等效的Perl程序是:

# grep.pl
$pat = shift;
while(<>) { if(/$pat/i) { print; } }

可以作为

调用
perl grep.pl abc file1.txt file2.txt ...

我的建议,坚持使用grep。