Linux下grep、tail、wc、awk文件處理命令


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的詳情看這里

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM