2012-11-29 21 views

回答

0
sed -n '/2005057488/p' filename 

不知道这是否比grep快。

+0

这是不可能的。 'grep'旨在做一件事(请参阅我的回答) – Steve

+0

@steve,那么我应该删除我的答案吗? SO是新的。请帮忙。 – Anon

16

grep一般速度如此快。它的设计仅限于一件事,一件事 - 它做得非常好。你可以阅读为什么here

但是,要加快速度,可以尝试一些事情。首先,它看起来像你正在寻找的模式是一个固定的字符串。幸运的是,grep有一个“固定字符串”选项:

-F, --fixed-strings 
     Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.) 

其次,由于grep通常是UTF-8很慢,你可以尝试禁用国家语言支持(NLS)通过设置环境LANG=C。因此,你可以试试这个药汁:

LANG=C grep -F "2005057488" file 

第三,这不是你的问题清楚,但如果你只是试图找到某些东西在你的文件存在一次,你也可以尝试加入的最大数量次找到模式。因此,-m 1,grep将在第一次发现后立即退出。你的命令现在看起来是这样的:

LANG=C grep -m 1 -F "2005057488" file 

最后,如果你有一个多核CPU,你可以给GNU parallel一展身手。它甚至带有一个explanation of how to use it with grep。要运行每个内核1.5工作,并给予1000个参数grep

find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {} 

grep一个大文件并行使用--pipe

< bigfile parallel --pipe grep STRING 

根据您的磁盘和CPU上,它可能会更快读取较大块:

< bigfile parallel --pipe --block 10M grep STRING 
+0

用于GNU并行的+1 – Anon

+0

+1很好的答案。 –

+1

非常清晰准确的答案!谢谢你=) – digvijay91

2

grep的工作速度比sed快。

$grep 2005057488 filename 
$sed -n '/2005057488/p' filename 

不过这两部作品来获取特定字符串的文件

相关问题