在平常工做中會遇到須要篩選過濾要查看的日誌等文本文件的任務,例如須要查看日誌文件的最後幾行等。 下面總結一下常見的對文本行過濾的方法。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著