在大文件中搜索字符串(无正则表达式等)less filename
并less -b 1 filename
退出或打印时,它无法分配内存。top
显示在死掉之前(1 秒间隔),内存使用量减少了大约 5%。
我还可以使用什么其他工具来支持大文件?该文件只有 100 MB 的日志。
$ less -V
less 458 (GNU regular expressions)
Copyright (C) 1984-2012 Mark Nudelman
Run Code Online (Sandbox Code Playgroud)
操作系统详细信息:
$ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 15988
-n: file descriptors 1024
-l: locked-in-memory size (kbytes) 64
-v: address space (kbytes) 2048000
-x: file locks unlimited
-i: pending signals 15988
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: unlimited
$ cat /etc/*rele*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.10
Run Code Online (Sandbox Code Playgroud)
这可能与您的内存无关,而与less
编写方式以及为其内部变量分配了多少空间有关。
无论如何,less
确实不是为此设计的,您应该使用类似的工具grep
:
grep yourQuery file
Run Code Online (Sandbox Code Playgroud)
如果您想查看查询周围的行(例如 5 行),请运行以下命令:
grep -C 5 yourQuery file
Run Code Online (Sandbox Code Playgroud)
如果您有太多匹配项,您可以将输出传递给less
,现在您应该能够搜索它:
grep -C 5 yourQuery file | less
Run Code Online (Sandbox Code Playgroud)
当然,如果您想手动执行此操作,可以在文本编辑器中打开该文件。任何认真的编辑器(例如vim
或 )emacs
都能够打开并搜索 100MB 的文件。