grep
Linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並匹配行打印出來。
命令語法:
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
命令實例:
-c:計算匹配到的行數,並顯示結果;
➜ ~ ping www.cnblogs.com > blog.log | tail -f blog.log PING www.cnblogs.com (42.121.252.58): 56 data bytes 64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=26.616 ms 64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=26.738 ms 64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=26.482 ms 64 bytes from 42.121.252.58: icmp_seq=3 ttl=32 time=26.485 ms 64 bytes from 42.121.252.58: icmp_seq=4 ttl=32 time=26.325 ms ^C ➜ ~ grep -c 26.616 blog.log 1
-C 2:顯示匹配行,並顯示之前與之后的兩行,也就是一共顯示5行;
➜ ~ grep -C 2 26.616 blog.log
PING www.cnblogs.com (42.121.252.58): 56 data bytes
64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=26.616 ms
64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=26.738 ms
64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=26.482 ms
-A 2:顯示匹配行,並顯示之后的兩行;
➜ ~ grep -A 2 26.616 blog.log
64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=26.616 ms
64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=26.738 ms
64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=26.482 ms
-v:顯示不包含匹配行的所有行;
➜ ~ grep -v 26.616 blog.log
PING www.cnblogs.com (42.121.252.58): 56 data bytes
64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=26.738 ms
64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=26.482 ms
64 bytes from 42.121.252.58: icmp_seq=3 ttl=32 time=26.485 ms
64 bytes from 42.121.252.58: icmp_seq=4 ttl=32 time=26.325 ms
-color:顯示匹配內容,並用不同顏色突出顯示;
➜ ~ grep --color 26.616 blog.log
64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=26.616 ms
tail
tail命令是線上機器查看log最常用的命令,可以從指定點開始將文件寫到標准輸出,tail -f 可以查看不停打出的日志文件,使你看到最新的log日志。
命令語法:
usage: tail [-F | -f | -r] [-q] [-b # | -c # | -n #] [file ...]
命令實例:
-f:監視File文件增長;
➜ ~ ping www.cnblogs.com > blog.log | tail -f blog.log PING www.cnblogs.com (42.121.252.58): 56 data bytes 64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=26.250 ms 64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=25.807 ms 64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=25.966 ms 64 bytes from 42.121.252.58: icmp_seq=3 ttl=32 time=25.939 ms 64 bytes from 42.121.252.58: icmp_seq=4 ttl=32 time=25.833 ms 64 bytes from 42.121.252.58: icmp_seq=5 ttl=32 time=25.862 ms 一直顯示下去。。。
-q:與-f相反,將文件內容直接顯示出來,默認顯示文件從后往前數10行的內容;
➜ ~ tail -q blog.log
PING www.cnblogs.com (42.121.252.58): 56 data bytes
64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=26.250 ms
64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=25.807 ms
64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=25.966 ms
64 bytes from 42.121.252.58: icmp_seq=3 ttl=32 time=25.939 ms
64 bytes from 42.121.252.58: icmp_seq=4 ttl=32 time=25.833 ms
64 bytes from 42.121.252.58: icmp_seq=5 ttl=32 time=25.862 ms
-n:從后往前數,顯示指定的行數,一般-f結合使用:-fn,比如-fn 20,一次當前顯示文件的最后20行,並不停顯示文件的最新內容;
➜ ~ ping www.cnblogs.com > blog.log | tail -fn 1 blog.log PING www.cnblogs.com (42.121.252.58): 56 data bytes 64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=25.813 ms 64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=26.363 ms 64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=26.218 ms 64 bytes from 42.121.252.58: icmp_seq=3 ttl=32 time=26.292 ms 一直顯示下去。。。
顯示文件內容的同時,顯示行號(並不是文件的行號,而是當前顯示的行號):
➜ ~ ping www.baidu.com > baidu.log | tail -fn 500 baidu.log | awk '{print NR,$0}' 【或者 ping www.baidu.com > baidu.log | tail -fn 500 baidu.log | cat -n】
1 PING www.a.shifen.com (61.135.169.125): 56 data bytes
2 64 bytes from 61.135.169.125: icmp_seq=0 ttl=51 time=6.030 ms
3 64 bytes from 61.135.169.125: icmp_seq=1 ttl=51 time=3.815 ms
4 64 bytes from 61.135.169.125: icmp_seq=2 ttl=51 time=3.964 ms
5 64 bytes from 61.135.169.125: icmp_seq=3 ttl=51 time=3.775 ms
從后往前數文件2行直接顯示出來:
tail -n 2 baidu.log
從文件的第二行開始顯示文件剩余部分:
tail -n +2 baidu.log
wc
Linux wc命令用於計算字數。利用wc指令我們可以計算文件的Byte數、字數、或是列數,不制定文件名或者文件名為“-”,則wc會從標准輸入設備讀取數據。
命令語法:
usage: wc [-clmw] [file ...]
命令實例:
-c 或--bytes或--chars顯示Bytes數:
➜ ~ cat blog.log
PING www.cnblogs.com (42.121.252.58): 56 data bytes
64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=25.762 ms
64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=25.733 ms
64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=26.556 ms
➜ ~ wc -c blog.log
238 blog.log
顯示行數:-l,顯示字數或單詞數:-w:
➜ ~ wc -l blog.log
4 blog.log
➜ ~ wc -w blog.log
30 blog.log
不過以上都可以直接wc filename,輸出值的含義對應上面兩個例子:
➜ ~ wc blog.log 4 30 238 blog.log
awk
awk是一種處理文本文件的語言,是一個強大的文本分析工具。
命令語法:
awk [選項參數] 'script' var=value file(s)
或
awk [選項參數] -f scriptfile var=value file(s)
命令實例:
直接看栗子,就不解釋了:
➜ ~ cat blog.log
PING www.cnblogs.com (42.121.252.58): 56 data bytes
64 bytes from 42.121.252.58: icmp_seq=0 ttl=32 time=25.762 ms
64 bytes from 42.121.252.58: icmp_seq=1 ttl=32 time=25.733 ms
64 bytes from 42.121.252.58: icmp_seq=2 ttl=32 time=26.556 ms
➜ ~ awk '{print $1 $2}' blog.log
PINGwww.cnblogs.com
64bytes
64bytes
64bytes
➜ ~ awk '{print $1 " ->> "$2}' blog.log
PING ->> www.cnblogs.com
64 ->> bytes
64 ->> bytes
64 ->> bytes
awk的詳情看這里