我想在unix中的文件中查找字符串模式。我使用下面的命令:在unix中找到文件中的字符串的快速方法
$grep 2005057488 filename
但文件包含数百万行,我有很多这样的文件。什么是获得grep以外的模式的最快方式。
我想在unix中的文件中查找字符串模式。我使用下面的命令:在unix中找到文件中的字符串的快速方法
$grep 2005057488 filename
但文件包含数百万行,我有很多这样的文件。什么是获得grep以外的模式的最快方式。
sed -n '/2005057488/p' filename
不知道这是否比grep快。
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
grep的工作速度比sed快。
$grep 2005057488 filename
$sed -n '/2005057488/p' filename
不过这两部作品来获取特定字符串的文件
这是不可能的。 'grep'旨在做一件事(请参阅我的回答) – Steve
@steve,那么我应该删除我的答案吗? SO是新的。请帮忙。 – Anon