mat*_*t b 190 unix linux bash text
尝试调试服务器的问题,我唯一的日志文件是20GB的日志文件(甚至没有时间戳!为什么人们System.out.println()用作日志?在生产中?!)
使用grep,我找到了一个我想看一下的文件区域,第347340107行.
做的事情除了
head -<$LINENUM + 10> filename | tail -20
Run Code Online (Sandbox Code Playgroud)
...需要head读取日志文件的前347万行,是否有一个快速简单的命令,可以将347340100 - 347340200(例如)转储到控制台?
更新我完全忘了grep可以打印匹配的上下文......这很有效.谢谢!
Skl*_*vvz 371
如果您知道行号,我找到了另外两个解决方案,但没有别的(没有grep可能):
假设你需要20到40行,
sed -n '20,40p;41q' file_name
Run Code Online (Sandbox Code Playgroud)
要么
awk 'FNR>=20 && FNR<=40' file_name
Run Code Online (Sandbox Code Playgroud)
WCC*_*WCC 104
# print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
Run Code Online (Sandbox Code Playgroud)
方法3对大文件有效
显示特定线条的最快方式
小智 69
用GNU-grep你可以说
grep --context=10 ...
unw*_*ind 24
没有,文件不是行可寻址的.
在文本文件中没有找到行n开头的常量方法.您必须流式传输文件并计算换行符.
使用最简单/最快的工具来完成工作.对我来说,使用head使多不是更有意义grep,因为后者的方式更加复杂.我不是说" grep很慢",但事实并非如此,但如果它比head这种情况更快,我会感到惊讶.head基本上,这是一个错误.
its*_*att 20
关于什么:
tail -n +347340107 filename | head -n 100
Run Code Online (Sandbox Code Playgroud)
我没有测试它,但我认为这样可行.
Luk*_*nko 12
我首先将文件分成几个较小的文件
$ split --lines=50000 /path/to/large/file /path/to/output/file/prefix
Run Code Online (Sandbox Code Playgroud)
然后grep生成的文件.
seh*_*ehe 12
我更喜欢进入less和
:43210 做同样的事 和那样的东西.
更好的是:点击v开始编辑(当然是在vim中),在那个位置.现在,请注意vim具有相同的键绑定!
您可以使用ex命令,标准的Unix编辑器(现在是Vim的一部分),例如
显示一行(例如第二行):
ex +2p -scq file.txt
Run Code Online (Sandbox Code Playgroud)
相应的sed语法: sed -n '2p' file.txt
线条范围(例如2-5行):
ex +2,5p -scq file.txt
Run Code Online (Sandbox Code Playgroud)
sed语法: sed -n '2,5p' file.txt
从给定的行到结束(例如,从文件的第5个到结尾):
ex +5,p -scq file.txt
Run Code Online (Sandbox Code Playgroud)
sed语法: sed -n '2,$p' file.txt
多行范围(例如2-4和6-8行):
ex +2,4p +6,8p -scq file.txt
Run Code Online (Sandbox Code Playgroud)
sed语法: sed -n '2,4p;6,8p' file.txt
可以使用以下测试文件测试上述命令:
seq 1 20 > file.txt
Run Code Online (Sandbox Code Playgroud)
说明:
+或者-c后跟命令 - 在读取文件后执行(vi/vim)命令,-s - 静音模式,也使用当前终端作为默认输出,q然后-c是退出编辑器的命令(添加!到强制退出,例如-scq!).小智 6
得到 ack
Ubuntu / Debian安装:
$ sudo apt-get install ack-grep
Run Code Online (Sandbox Code Playgroud)
然后运行:
$ ack --lines=$START-$END filename
Run Code Online (Sandbox Code Playgroud)
例:
$ ack --lines=10-20 filename
Run Code Online (Sandbox Code Playgroud)
来自$ man ack:
--lines=NUM
Only print line NUM of each file. Multiple lines can be given with multiple --lines options or as a comma separated list (--lines=3,5,7). --lines=4-7 also works.
The lines are always output in ascending order, no matter the order given on the command line.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
325961 次 |
| 最近记录: |