Shell输出文本中的指定行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell输出文本中的指定行相关的知识,希望对你有一定的参考价值。
参考技术A 在Linux系统上如何快速查看文本中指定行呢?有时文本较大比如有10w行,想要快速查看第99行该怎么做呢?本文以文件名test.txt为例,介绍3种方式快速查看test.txt的第99行。相信你可以轻易的举一反三。
sed全名:stream editor,流编辑器,使用程序的方式来编辑文本,可以实现替换、删除、新增、选取特定行等功能,是一种很hacker的方式。sed基本上使用正则表达式匹配,对正则表达式要求较高。
想要快速入门sed参考 sed简明教程 ,想要深入学习参考 sed完整手册 。
关键Options介绍:
ps: 以上命令并不会真的修改掉test.txt的内容,如果想修改文本内容可以使用重定向,或者使用 -i 选项。
有了以上的sed基础,可以轻易得出解决方案: sed -n '99,p' test.txt 。但sed在print后并不会立即退出,还会继续搜索文件直到文件末尾,当文件较大的时候使用sed的效率会比较低。可以做如下优化: sed -n '99,p;100q' test.txt ,打印完之后在100行退出。
sed -n '1p;10p' test.txt
sed -n '1,10p' test.txt
sed -n '1,5p;9p' test.txt
awk: 文本处理工具,可以在文件中查找与模式匹配的行并在这些行上执行指定的操作。awk比sed早诞生2-3年,作用与sed类似。快速入门awk可参考 awk简明教程 。
awk提供了一系列内建变量:
使用内建变量NR和FNR:
ps: awk打印完也不会立即退出,可以添加exit优化:awk ‘NR==99 print; exit’ test.txt
head和tail故名思意,相对简单,分别输出文件或流的开头n行或结尾n行,就不在此详细介绍了。直接给出解决方案:
tail -n+99 test.txt|head -1
很容易想到对称的组合: head -99 test.txt|tail -1 ,但是当文件不足99行时,输出的是文件最后一行的内容。
linux sed 之 查看指定时间段的日志
参考技术A 命令格式: sed -n '/起始时间/','/结束时间/p' [日志文件]eg1 :
注:
日期时间格式要和日志文件中的保持一致;
eg2 :
nginx中的日期时间格式和eg1中的格式不一致,这时使用的命令是:
注:
使用“\”是为了转义“/”,不然命令行会报错
也可以将输出的命令行内容输出到一个文本文件中,这样方便用编辑器查看,命令是:
eg3 :
这样输出的内容就会保存在gfc.log文本文件中。
eg:
以上是关于Shell输出文本中的指定行的主要内容,如果未能解决你的问题,请参考以下文章