在平常工做中会遇到须要筛选过滤要查看的日志等文本文件的任务,例如须要查看日志文件的最后几行等。 下面总结一下常见的对文本行过滤的方法。linux
接下来主要使用的是head,tail,sed和awk,这几个工具。其中sed和awk工具很是强大,使用它们来进行文本的过滤可能有点大材小用,不过基本上全部的任务均可以经过head和tail两个命令来完成,并且head和tail平常使用更加方便。工具
输入下面命令,生成一个测试用的文件。测试
$ seq -f "Line No %g" 10 > lines.txt
能够经过head命令来完成,具体命令和输出以下:命令行
$ head -n 3 lines.txt Line No 1 Line No 2 Line No 3
或者经过sed命令来完成,具体命令和输出以下:日志
$ sed -n '1,3p' lines.txt Line No 1 Line No 2 Line No 3
awk命令也能够完成code
$ awk 'NR<=3' lines.txt Line No 1 Line No 2 Line No 3
使用tail命令来完成,具体命令和输出以下:awk
$ tail -n 3 lines.txt Line No 8 Line No 9 Line No 10
使用tail命令来完成的方法:sed
$ tail -n +5 lines.txt Line No 5 Line No 6 Line No 7 Line No 8 Line No 9 Line No 10
sed命令来完成:方法
$ sed -n '5,$p' lines.txt Line No 5 --略-- Line No 10
用awk来完成:总结
$ awk 'NR>=5' lines.txt Line No 5 --略-- Line No 10
用head来完成:
$ head -n -2 lines.txt Line No 1 Line No 2 Line No 3 Line No 4 Line No 5 Line No 6 Line No 7 Line No 8
用head和tail两个工具:
$ < lines.txt head -n 8 | tail -n 3 Line No 6 Line No 7 Line No 8
sed的方法:
$ sed -n '6,8p' lines.txt Line No 6 Line No 7 Line No 8
awk的方法:
$ awk '(NR>=6)&&(NR<=8)' lines.txt Line No 6 Line No 7 Line No 8
sed命令生成奇数行
$ sed -n '1~2p' lines.txt Line No 1 Line No 3 Line No 5 Line No 7 Line No 9
sed命令生成偶数行
$ sed -n '0~2p' lines.txt Line No 2 Line No 4 Line No 6 Line No 8 Line No 10
awk命令生成奇数行
$ awk 'NR%2' lines.txt Line No 1 Line No 3 Line No 5 Line No 7 Line No 9
awk命令生成偶数行
$ awk '(NR+1)%2' lines.txt Line No 2 Line No 4 Line No 6 Line No 8 Line No 10
linux系统的一个有名的特色是绝大多少文件都是文本文件,这些文件均可以经过上面的方法来查看特定的行。另外linux命令行工具也很是灵活,完成一件任务,不是只有一种方法,有不少方法能够实现,这也是linux好玩的地方。在文本过滤方面,sed和awk命令还有不少强大的用法,你们有兴趣的话能够深刻研究一下。
参考文献:
《命令行中的数据科学》 Jeroen Janssens著