这就是我所想的:grep程序试图匹配行中的每一个模式,就像:
echo "abc abc abc" | grep abc --color结果是,这三个abc都是红色的,所以grep做了一个与行完全匹配的模式。
但是在这个场景中,我有很多大文件要处理,但是我感兴趣的单词很可能出现在前几个单词中。我的工作是找出没有字句的台词。因此,如果在找到单词时,grep程序可以继续到下一行,而不必检查行的其余部分,那么它可能会大大加快速度。
在grep中是否有partial match选项可以这样做?
像这样:
echo abc abc abc | grep --partial abc --color只有第一个abc色的红色。
发布于 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周期。一个真实世界的差异可能会出现在病态的长线和非常短的搜索字符串中。
发布于 2015-08-19 15:40:38
如果您的工作是查找没有单词的行,则可以尝试删除包含特定单词的行。
sed '/word/d' input_file当第一次出现在当前行上时,Sed可能会继续到下一行。
发布于 2015-08-19 15:43:09
如果您想查找没有特定单词的行,可以使用grep进行此操作。
试试grep -v "abc",它的意思是做逆操作。在本例中,查找没有字符串"abc“的行。
如果我有一个像这样的文件:
line one abc
line two abc
line three def执行grep -v "abc" file.txt将返回line three def。
https://stackoverflow.com/questions/32099346
复制相似问题