在unix中查找文件中字符串的快速方法
我想在unix中查找文件中的字符串模式。我使用以下命令:在unix中查找文件中字符串的快速方法,unix,Unix,我想在unix中查找文件中的字符串模式。我使用以下命令: $grep 2005057488 filename 但这个文件包含数百万行,我有很多这样的文件。除了grep之外,获取模式的最快方法是什么 sed -n '/2005057488/p' filename 不过,不确定这是否比grep快。grep通常与grep一样快。它的设计只有一件事,而且它做的很好。你可以读懂为什么 然而,为了加快速度,你可以尝试一些方法。首先,看起来您要查找的模式是一个固定字符串。幸运的是,grep有一个“固定字符
$grep 2005057488 filename
但这个文件包含数百万行,我有很多这样的文件。除了grep之外,获取模式的最快方法是什么
sed -n '/2005057488/p' filename
不过,不确定这是否比grep快。
grep
通常与grep一样快。它的设计只有一件事,而且它做的很好。你可以读懂为什么
然而,为了加快速度,你可以尝试一些方法。首先,看起来您要查找的模式是一个固定字符串。幸运的是,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
上的速度通常非常慢,您可以尝试通过设置环境LANG=C
来禁用国家语言支持(NLS)。因此,您可以尝试这种混合物:
LANG=C grep -F "2005057488" file
第三,您的问题中不清楚,但是如果您只尝试查找文件中是否存在某个内容一次,您也可以尝试添加最多次数来查找模式。因此,当-m1
时,grep
将在找到第一个匹配项后立即退出。您的命令现在可以如下所示:
LANG=C grep -m 1 -F "2005057488" file
最后,如果你有一个多核CPU,你可以试一试。它甚至还附带了一个。要为每个核心运行1.5个作业,并为grep
提供1000个参数,请执行以下操作:
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,我应该删除我的答案吗?对这样的人来说是新的。请帮忙。有没有办法知道grep的状态。我问这个是因为,当搜索50GB的文件时,我经常想知道光标的搜索状态for@BalajiBoggaramRamanarayan:我不知道你所说的“光标状态”是什么意思。如果你的意思是“进步”,那么我通常会使用pv
(管道查看器)。