linux搜索過濾--grep


  grep在服務端查詢消息時經常會被使用到,這里總結幾個常用,簡單的命令,熟練掌握可以使查詢更為高效。

  基本格式:

grep [option] pattern file

  幾個重要的命令參數,這里不列舉全部,只列舉可能會常用的,便於快速查詢:

  除了不加任何參數表示搜索符合之后的樣式的內容之外,剩下的參數:

-v   --revert-match   #顯示不包含匹配文本的所有行。 
-i    --ignore-case   #忽略字符大小寫的差別。   
-n   --line-number   #在顯示符合樣式的那一行之前,標示出該行的列數編號。
-c    --count   #計算符合樣式的列數。

  舉例:

[xxx@application01 yyy]$ grep -c 'mongo' nohup.out 
grep: nohup.out: Permission denied
[xxx@application01 yyy]$ sudo grep -c 'mongo' nohup.out 
10633
[xxx@application01 yyy]$ sudo grep -v 'not' stop.sh 
#!/bin/sh
PROCESS=`ps -ef|grep zzz|grep -v grep|grep -v PPID|awk '{ print $2}'`
num=`ps -ef|grep zzz|grep -v grep|wc -l`
for i in $PROCESS
do
  echo "Kill the consumer process [ $i ]"
  kill -9 $i
done
echo "$num processes be killed"

[xxx@application01 yyy]$ sudo grep -i ppid stop.sh 
PROCESS=`ps -ef|grep zzz|grep -v grep|grep -v PPID|awk '{ print $2}'`
[xxx@application01 yyy]$ sudo grep -n -i ppid stop.sh 
2:PROCESS=`ps -ef|grep zzz|grep -v grep|grep -v PPID|awk '{ print $2}'`

  如果將grep與正則表達式結合,可以使得該工具變得更加強大,這里記錄幾個常用的正則表達式,可以和grep參數配合使用:

\< #錨定單詞的開始
    如:'\<grep'匹配包含以grep開頭的單詞的行。    
\> #錨定單詞的結束
    如'grep\>'匹配包含以grep結尾的單詞的行
^  #錨定行的開始 
    如:'^grep'匹配所有以grep開頭的行。    
$  #錨定行的結束 
    如:'grep$'匹配所有以grep結尾的行。
[] #匹配一個指定范圍內的字符
    如'[Gg]rep'匹配Grep和gre

  舉例:

[xxx@application01 yyy]$ sudo grep -n '\<grep' stop.sh 
2:PROCESS=`ps -ef|grep zzz|grep -v grep|grep -v PPID|awk '{ print $2}'`
3:num=`ps -ef|grep zzz|grep -v grep|wc -l`
[xxx@application01 yyy]$ sudo grep -n '^e' stop.sh 
9:echo "$num processes be killed"
[xxx@application01 yyy]$ sudo grep -n 'i$' stop.sh 
7:  kill -9 $i
[xxx@application01 yyy]$ sudo grep -n [Gg]rep stop.sh 
2:PROCESS=`ps -ef|grep zzz|grep -v grep|grep -v PPID|awk '{ print $2}'`
3:num=`ps -ef|grep zzz|grep -v grep|wc -l`

  最后,如果需要將查詢內容輸出到文本中就可以:

[xxx@application01 yyy]$ ll
total 59976
-rwxrwxrwx 1 root root        0 Oct 19 17:20 1.txt
drwxr-xr-x 2 root root     4096 May 31 20:46 lib
-rw-r--r-- 1 root root    39936 Jul 18 15:30 zzz.jar
-rw-r--r-- 1 root root    39792 Jun  3 14:38 zzz.jar.20160714
-rw-r--r-- 1 root root    39835 Jul 14 09:31 zzz.jar.20160718
-rw------- 1 root root 61218369 Oct 19 17:20 nohup.out
-rw-r--r-- 1 root root      275 Jun  1 15:05 stop.sh
[xxx@application01 yyy]$ sudo grep 'mongo' nohup.out >1.txt 
[xxx@application01 yyy]$ ll
total 61184
-rwxrwxrwx 1 root root  1159937 Oct 19 17:20 1.txt
drwxr-xr-x 2 root root     4096 May 31 20:46 lib
-rw-r--r-- 1 root root    39936 Jul 18 15:30 zzz.jar
-rw-r--r-- 1 root root    39792 Jun  3 14:38 zzz.jar.20160714
-rw-r--r-- 1 root root    39835 Jul 14 09:31 zzz.jar.20160718
-rw------- 1 root root 61286858 Oct 19 17:20 nohup.out
-rw-r--r-- 1 root root      275 Jun  1 15:05 stop.sh

   在實際的過濾中,很多時候我們會將無用的(或者有用的)信息刪除(保留)下來,可能會涉及到多個關鍵字,最簡單的做法就是用或的關系將各個條件並列出來。例如在日志信息中,將含有socket,session,zookeeper的信息過濾掉:

grep -Evi 'socket|session|zookeeper' validateChiqTest.log

這里的E參數以及之后的'|'即屬於或操作,-i為忽略大小寫,-v指將這些信息篩選不保留。


免責聲明!

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



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