我想要搜索一个长句子(超过 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