对于较长的行,使用 grep 获取该行的一部分

对于较长的行,使用 grep 获取该行的一部分

我想要搜索一个长句子(超过 1024 个字母)。

我有一个文本文件(test.txt),其中有一个长句子,如下所示:

afdafglwqgkjrldjl;ewqje;'k;g;je;;;fdsgalsdkf;akslg;safdas.....dasfsd

现在我想检查哪一行包含单词saf。此命令仅显示整个句子:

less test.txt | grep saf

是否有可能获得句子的一部分或者我应该使用除之外的命令grep

答案1

这并不是您想要的:显示匹配的行并突出显示这些行中出现的条目:

grep --color 'saf' test.txt

使用以下选项搜索saf并显示找到的事件前后最多 15 个字符:

  • 标准正则表达式语法,由@kamil-maciorowski在对该问题的评论中首次提到:

    grep -o '.\{0,15\}saf.\{0,15\}' test.txt | grep saf --color
    
  • -P如果可用,则使用与 Perl 兼容的正则表达式语法以及以下选项:

    grep -o -P '.{0,15}saf.{0,15}' test.txt | grep --color saf
    
  • -E如果你grep没有-P选项(例如在 macOS 上),可以使用该选项扩展正则表达式语法:

    grep -o -E '.{0,15}saf.{0,15}' test.txt | grep --color saf
    

答案2

bgrep如果行不一定适合内存

我时不时会回到这个随机仓库:https://github.com/tmbinc/bgrep安装:

curl -L 'https://github.com/tmbinc/bgrep/raw/master/bgrep.c' | gcc -O2 -x c -o $HOME/.local/bin/bgrep -

使用:

bgrep `printf %s saf | od -t x1 -An -v | tr -d '\n '` myfile.bin

示例输出:

myfile.bin: c80000003
\x02abc
myfile.bin: c80000007
dabc

我已经在内存中容纳不下的文件上测试过它,并且它运行良好。

我已在以下位置提供了进一步的详细信息:https://unix.stackexchange.com/questions/223078/best-way-to-grep-a-big-binary-file/758528#758528

相关内容