Grep命令9個經典使用情境介紹,grep命令9情境

來源:互聯網
上載者:User

Grep命令9個經典使用情境介紹,grep命令9情境
Grep

全稱Global Regular Expression Print,表示全域Regex

是一個強大的文本搜尋工具,採用正則匹配

1、命令格式

grep [options] files

2、主要參數

-c: 只輸出匹配行的數目

-i: 不區分大小寫

-n:顯示匹配航以及行號

-l:查詢多檔案的時候只輸出包含匹配字元的檔案名稱

-v:反向匹配,即顯示不匹配的行

-h: 查詢的時候不適用檔案名稱

-s:不顯示錯誤資訊

3、部分Regex

\ 反義字元:如”\”\”“表示匹配””

^$ 開始和結束

[] 單個字元,[A]

[ - ] 匹配一個範圍,[0-9a-zA-Z]匹配所有數字和字母

* 前面的字元出現0次或者多次

+ 前面的字元出現了一次或者多次

. 任一字元

4、經典情境

除非要精確區分大小寫,否則請加上-i來忽略大小寫

(1)結合find命令和管道

你的一個音樂檔案夾裡有多種格式的檔案,而你只想找到藝術家jay的mp3檔案,並且不含有任何的混合音軌

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

分析: 1)使用find -name 來列出所有mp3檔案,重新導向給grep

2) 使用grep -i 來尋找包含jay的行

3)使用grep -vi 來尋找不包含remix的行

(2)-A -B -C

很多時候,我們並關心匹配行而是關心匹配行的上下文。這時候-A -B -C就有用了

-A n 後n行,A記憶為(After)

-B n 前n行,B記憶為(Before)

-C n 前n行,後n行,C記憶為(Center)

舉例

[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  

(3) 用-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  

(4) -r 遞迴尋找子目錄

尋找目前的目錄極其子目錄下麵包含匹配字元的檔案

尋找子目錄,匹配後輸出行號,這裡的點表示目前的目錄

[root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG* .

例子:

[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:https://www.baidu.com  

尋找子目錄,匹配後只輸出檔案名

[root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .

例子:

[root@localhost ~]# grep -lr baidu .  ./file.txt  ./test/test.txt

(5)–line-buffered 開啟buffering 模式

你有一個檔案是動態,它不斷地添加資訊到檔案的尾部,而你想要輸出包含某些資訊的行。即持續的grep一個動態流

[root@localhost ~]#tail -f file | grep –line-buffered your_pattern

(6)結合ps尋找進程

[root@localhost ~]# ps aux | grep init  root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                               root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"  root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients  root      4956  0.0  0.1   3920   680 pts/1    R+   23:27   0:00 grep init  

這裡我們看到了grep init我們執行的命令也被列出來了

如果不想要這一行,我們可以這麼改命令

[root@localhost ~]# ps aux | grep [i]nit  root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                               root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"  root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients  

(7)尋找不包含某一個目錄

[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:https://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

(8)尋找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,只顯示匹配行中匹配Regex的那部分

-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  

(9)尋找郵箱

[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  njuhwc@gmil.com 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.