在日常工作中会遇到需要筛选过滤要查看的日志等文本文件的任务,例如需要查看日志文件的最后几行等。下面总结一下常见的对文本行过滤的方法。一起去看看吧!
常用命令行工具
接下来主要使用的是head,tail,sed和awk,这几个工具。其中sed和awk工具非常强大,使用它们来进行文本的过滤可能有点大材小用,不过基本上所有的任务都可以通过head和tail两个命令来完成,而且head和tail日常使用更加方便。
用法示例
准备工作
输入下面命令,生成一个测试用的文件。
$seq-f"LineNo%g"10>lines.txt
只显示文本的前3行
可以通过head命令来完成,具体命令和输出如下:
$head-n3lines.txt
LineNo1
LineNo2
LineNo3
或者通过sed命令来完成,具体命令和输出如下:
$sed-n'1,3p'lines.txt
LineNo1
LineNo2
LineNo3
awk命令也可以完成
$awk'NR<=3'lines.txt
LineNo1
LineNo2
LineNo3
只显示文本的最后3行
使用tail命令来完成,具体命令和输出如下:
$tail-n3lines.txt
LineNo8
LineNo9
LineNo10
只显示文本的第5行到最后1行
使用tail命令来完成的方法:
$tail-n+5lines.txt
LineNo5
LineNo6
LineNo7
LineNo8
LineNo9
LineNo10
sed命令来完成:
$sed-n'5,$p'lines.txt
LineNo5
--略--
LineNo10
用awk来完成:
$awk'NR>=5'lines.txt
LineNo5
--略--
LineNo10
只显示文本的倒数第3行到第1行
用head来完成:
$head-n-2lines.txt
LineNo1
LineNo2
LineNo3
LineNo4
LineNo5
LineNo6
LineNo7
LineNo8
只显示文本的第6行到第8行
用head和tail两个工具:
$<lines.txthead-n8|tail-n3
LineNo6
LineNo7
LineNo8
sed的方法:
$sed-n'6,8p'lines.txt
LineNo6
LineNo7
LineNo8
awk的方法:
$awk'(NR>=6)&&(NR<=8)'lines.txt
LineNo6
LineNo7
LineNo8
只显示文本奇数行或偶数行
sed命令生成奇数行
$sed-n'1~2p'lines.txt
LineNo1
LineNo3
LineNo5
LineNo7
LineNo9
sed命令生成偶数行
$sed-n'0~2p'lines.txt
LineNo2
LineNo4
LineNo6
LineNo8
LineNo10
awk命令生成奇数行
$awk'NR%2'lines.txt
LineNo1
LineNo3
LineNo5
LineNo7
LineNo9
awk命令生成偶数行
$awk'(NR+1)%2'lines.txt
LineNo2
LineNo4
LineNo6
LineNo8
LineNo10
小结
linux系统的一个有名的特点是绝大多少文件都是文本文件,这些文件都可以通过上面的方法来查看特定的行。另外linux命令行工具也非常灵活,完成一件任务,不是只有一种方法,有很多方法可以实现,这也是linux好玩的地方。在文本过滤方面,sed和awk命令还有很多强大的用法,大家有兴趣的话可以深入研究一下。