grep命令

grep命令介紹

做用

      Linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表達式版本,它的使用權限是全部用戶。node

格式

grep [options]正則表達式

主要參數

[options]主要參數:
-c:只輸出匹配行的計數。
-I:不區分大 小寫(只適用於單字符)。
-h:查詢多文件時不顯示文件名。
-l:查詢多文件時只輸出包含匹配字符的文件名。
-n:顯示匹配行及行號。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的全部行。
pattern正則表達式主要參數:
\: 忽略正則表達式中特殊字符的原有含義。
^:匹配正則表達式的開始行。
$: 匹配正則表達式的結束行。
\<:從匹配正則表達 式的行開始。
\>:到匹配正則表達式的行結束。
[ ]:單個字符,如[A]即A符合要求 。
[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。
。:全部的單個字符。
* :有字符,長度能夠爲0。

grep命令使用簡單實例

$ grep 'test' d*
顯示全部以d開頭的文件中包含 test的行。
$ grep 'test' aa bb cc
顯示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]\{5\}' aa
顯示全部包含每一個字符串至少有5個連續小寫字符的字符串的行。
$ grep 'wesest.*\1' aa
若是west被匹配,則es就被存儲到內存中,並標記爲1,而後搜索任意個字符(.*),這些字符後面緊跟着 另一個es(\1),找到就顯示該行。若是用egrep或grep -E,就不用」\」號進行轉義,直接寫成’w(es)t.*\1′就能夠了。

經典應用場景

      除非要精確區分大小寫,不然請加上-i來忽略大小寫express

結合find命令和管道

想要實現
你的一個音樂文件夾裏有多種格式的文件,而你只想找到藝術家jay的mp3文件,而且不含有任何的混合音軌工具

命令
[root@localhost ~]#find . -name ".mp3" | grep -i jay | grep -vi "remix"oop

分析
1)使用find -name 來列出全部mp3文件,重定向給grep
2) 使用grep -i 來查找包含jay的行
3)使用grep -vi 來查找不包含remix的行google

-A -B -C

不少時候,咱們並關心匹配行而是關心匹配行的上下文。這時候-A -B -C就有用了
-A n 後n行,A記憶爲(After)
-B n 前n行,B記憶爲(Before)
-C n 前n行,後n行,C記憶爲(Center)code

舉例regexp

[root@localhost ~]# ifconfig | grep -A 2 "Link encap"
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F3:38:15  
          inet addr:192.168.91.129  Bcast:192.168.91.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef3:3815/64 Scope:Link
--
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
 
 
[root@localhost ~]#  ifconfig | grep -C 2 "lo"
          Interrupt:67 Base address:0x2024 
 
 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host

用-c來統計數目

你手頭有一個很大的文件,這個文件包含網址,好比www.baidu.com tieba.baidu.com等等。你想要知道有多少個隸屬於百度的網址。遞歸

命令
root@localhost ~]# grep -c "*baidu.com*" filename內存

例子

[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -cn ".*baidu.com.*" file.txt 
3

-r 遞歸查找子目錄

  • 查找當前目錄及其子目錄下面包含匹配字符的文件
  • 查找子目錄,匹配後輸出行號,這裏的點表示當前目錄

命令(查找當前路徑下全部文件中,含有baidu的文件)
[root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG* .

例子

#查找當前路徑下全部文件中,含有`baidu`的文件
[root@localhost ~]# grep -nr baidu .
./file.txt:8:www.baidu.com
./file.txt:9:tieba.baidu.com
./file.txt:11:www.baidu.com/search/index
./test/test.txt:1:http://www.baidu.com

命令(查找子目錄,匹配後只輸出文件名)
[root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .

例子

#查找子目錄,匹配後只輸出文件名
[root@localhost ~]# grep -lr baidu .
./file.txt
./test/test.txt

查找不包含某一個目錄

命令
[root@localhost ~]#grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

例子

[root@localhost ~]# ls
anaconda-ks.cfg  Desktop  file.txt  find.result  install.log  install.log.syslog  test
[root@localhost ~]# grep -r baidu .
./file.txt:www.baidu.com
./file.txt:tieba.baidu.com
./file.txt:www.baidu.com/search/index
./test/test.txt:http://www.baidu.com
這時候若是咱們不想包含test目錄

[root@localhost ~]# grep -R --exclude-dir=text "baidu" .
./file.txt:www.baidu.com
./file.txt:tieba.baidu.com
./file.txt:www.baidu.com/search/index

若是報錯
grep: unrecognized option `--exclude-dir=test'
說明版本過老,更新下就ok

查找IP地址

命令說明
這裏用到了-o和-P命令
咱們經過man grep查看
-o, --only-matching:
              Show only the part of a matching line that matches PATTERN.
-P, --perl-regexp:
              Interpret PATTERN as a Perl regular expression.
也就是說-o,只顯示匹配行中匹配正則表達式的那部分
-P,做爲Perl正則匹配

舉例

[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt
192.168.0.1
162.12.0.123

查找郵箱

命令說明
[root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt

例子

[root@localhost ~]# cat file.txt
wtmp begins Mon Feb 24 14:26:08 2014
192.168.0.1
162.12.0.123
"123"
123""123
njuhwc@163.com
njuhwc@gmil.com 123
www.baidu.com
tieba.baidu.com
www.google.com
www.baidu.com/search/index
[root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt
njuhwc@163.com
相關文章
相關標籤/搜索