首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“部分grep”加速grep速度?

“部分grep”加速grep速度?
EN

Stack Overflow用户
提问于 2015-08-19 15:08:39
回答 3查看 219关注 0票数 2

这就是我所想的:grep程序试图匹配行中的每一个模式,就像:

代码语言:javascript
复制
echo "abc abc abc" | grep abc --color

结果是,这三个abc都是红色的,所以grep做了一个与行完全匹配的模式。

但是在这个场景中,我有很多大文件要处理,但是我感兴趣的单词很可能出现在前几个单词中。我的工作是找出没有字句的台词。因此,如果在找到单词时,grep程序可以继续到下一行,而不必检查行的其余部分,那么它可能会大大加快速度。

在grep中是否有partial match选项可以这样做?

像这样:

代码语言:javascript
复制
echo abc abc abc | grep --partial abc --color

只有第一个abc色的红色。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-19 15:42:23

请参阅grep内部程序的这个很好的介绍:

http://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html

特别是:

grep避免将输入分解为行。寻找新行会使grep慢几倍,因为要找到换行符,它必须查看每个字节! 因此,grep没有使用面向行的输入,而是将原始数据读入一个大缓冲区中,使用Boyer搜索缓冲区,并且只有在找到匹配时才会去查找边界换行符。(某些命令行选项,如-n,禁用此优化。)

所以答案是:不。grep查找下一个搜索字符串的速度要快得多,而不是寻找新的行。

编辑:关于评论中关于color=never的猜测,我很快就看了一下源代码。如果找到匹配项,变量color_option不会在正则表达式的实际搜索或前一行和即将出现的换行符附近使用。

在搜索这些行终止符时,可能会节省一些CPU周期。一个真实世界的差异可能会出现在病态的长线和非常短的搜索字符串中。

票数 3
EN

Stack Overflow用户

发布于 2015-08-19 15:40:38

如果您的工作是查找没有单词的行,则可以尝试删除包含特定单词的行。

代码语言:javascript
复制
sed '/word/d' input_file

当第一次出现在当前行上时,Sed可能会继续到下一行。

票数 1
EN

Stack Overflow用户

发布于 2015-08-19 15:43:09

如果您想查找没有特定单词的行,可以使用grep进行此操作。

试试grep -v "abc",它的意思是做逆操作。在本例中,查找没有字符串"abc“的行。

如果我有一个像这样的文件:

代码语言:javascript
复制
line one abc
line two abc
line three def

执行grep -v "abc" file.txt将返回line three def

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32099346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档