Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unix中查找文件中字符串的快速方法_Unix - Fatal编程技术网

在unix中查找文件中字符串的快速方法

在unix中查找文件中字符串的快速方法,unix,Unix,我想在unix中查找文件中的字符串模式。我使用以下命令: $grep 2005057488 filename 但这个文件包含数百万行,我有很多这样的文件。除了grep之外,获取模式的最快方法是什么 sed -n '/2005057488/p' filename 不过,不确定这是否比grep快。grep通常与grep一样快。它的设计只有一件事,而且它做的很好。你可以读懂为什么 然而,为了加快速度,你可以尝试一些方法。首先,看起来您要查找的模式是一个固定字符串。幸运的是,grep有一个“固定字符

我想在unix中查找文件中的字符串模式。我使用以下命令:

$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
(管道查看器)。