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输出文本中的指定行的主要内容,如果未能解决你的问题,请参考以下文章

shell 如何取本本文件中 指定两个字符中间的内容呢?

初识shell文本处理工具之gawk-sed

Python 读取指定行数

shell awk如何输出文件的指定列

shell,计算指定行的和,计算指定列的和

shell脚本命令如何 读取文本指定位置内容 写入另一文本指定位置并替换原内容