Linux文本處理三劍客之grep

一、grep命令

grep(global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來

作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。

模式:由正則表達式字符及文本字符所編寫的過濾條件


二、grep命令格式

grep [OPTIONS]  PATTERN  [FILE…]

grep root /etc/passwd

 1.png

grep "$USER" /etc/passwd(變量)

2.png

grep '$USER' /etc/passwd

3.png

grep `whoami` /etc/passwd(命令替換)

4.png

三、grep命令選項

–color=auto:對匹配到的文本著色顯示

alias grep='grep –color=auto'在centos7中默認是著色顯示的

-v:顯示不能夠被模式匹配到的行,其實就是取反的意思

匹配除root用戶以外的其他用戶信息

5.png

-i:忽略字符大小寫

不管是小寫字母還是大寫字母都能匹配

6.png

-n:顯示匹配的行號

顯示出匹配到信息行號,方便查看它的位置

7.png

-c:統計字符的行數

匹配到的信息總共有多少行

8.png

-o:僅顯示匹配到的字符串

把所有匹配到的root字符串顯示出來

9.png

-q:靜默模式,不輸出任何信息

只關心命令執行與否,不再終端上顯示信息,可以用echo $?判斷

10.png

11.png

    -A#:after,后#行 

顯示匹配到的并且顯示匹配到的后三行

12.png

    -B#:before,前#行

顯示匹配到的并且顯示匹配到的前三行

13.png

-C:context,前后各#行

顯示匹配到的信息前后各兩行

14.png

-e:實現多個選項間的邏輯or關系(默認是或者的關系)

grep –e ‘cat ’ -e ‘dog’ file

把帶有root和baah關鍵字的信息顯示出來

15.png

-w:整行匹配整個單詞

16.png

-E:使用ERE

這個選項就是egrep,往回看有詳細解釋

四、正則表達式詳解

1、REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能

2、程序支持:grep, vim, less,nginx等

3、分兩類:

    基本正則表達式:BRE

    擴展正則表達式:ERE

                    grep -E, egrep

4、正則表達式引擎:

      采用不同算法,檢查處理正則表達式的軟件模塊

    PCRE(Perl Compatible Regular Expressions)

5、元字符分類:字符匹配、匹配次數、位置錨定、分組

6、可以使用man 7 regex查看


五、基本正則表達式之字符匹配

. :匹配任意單個字符;

匹配以r開頭以t結尾中間任意兩個字符

17.png

[] :匹配指定范圍內的任意單個字符

匹配以r開頭以t結尾中間a-z之間任意單個字符的單詞

18.png

[^] :匹配指定范圍外的任意單個字符

匹配以r開頭以t結尾中間除了b-z之外任意單個字符的單詞

19.png

[:digit:]:表示所有數字

[:lower:]:表示所有小寫字母

[:upper:]:表示所以大寫字母

[:alpha:]:表示所有字母,包括大小寫

[:alnum:]:表示所以字母和數字

[:punct:]:表示所有標點符號

[:space:]:表示空格和tab


六、基本正則表達式之匹配次數

用在要指定的額字符后面,用于指定前面字符要出現的次數

 *:匹配前面的字符任意次,包括0次

.*:任意長度的任意字符

\?:匹配其前面的字符0或1次

\+:匹配其前面的字符至少1次

\{m\}:匹配前面的字符m次

\{m,n\}:匹配前面的字符至少m次,至多n次

\{,n\}:匹配前面的字符至多n次

\{m,\}:匹配前面的字符至少m次

七、基本正則表達式之位置錨定

^:行首錨定:用于模式的最左側

表達以root開頭的行

4.png

$:行尾錨定:用于模式的最右側

表達以bash結尾的行

5.png

^PATTERN$:用于模式匹配整行

    ^$:空行

    ^[[:space:]]$:空白行

刪除空白行

6.png

\<或\b:詞首錨定,用于單詞模式的左側

\>或\b:詞尾錨定,用于單詞模式的右側

\<PATTERN\>:匹配整個單詞


八、基本正則表達式之分組

將一個或者多個字符捆綁在一起,當作一個整體進行處理

如:\(root\)\+ 表示root重復一次以上

分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部變量中,這些變量的命令方式為:\1,\2,\3,…

\1:從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;

后向引用:引用前面的分組括號中模式所匹配字符(而并非模式本身)

7.png


九、練習:

1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式)

8.png

2、顯示/etc/passwd文件中不以/bin/bash結尾的行

9.png

3、顯示用戶rpc默認的shell程序

10.png

4、找出/etc/passwd中的兩位或三位數

11.png

5、顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行

12.png

6、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行

13.png

7、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin),而后找出/etc/passwd文件中用戶名同shell名的行

14.png

8、顯示Ip地址

15.png


十、egrep及擴展的正則表達式

egrep= grep -E

egrep[OPTIONS] PATTERN [FILE…]

擴展正則表達式就是grep -E,但是他們表達的方式使用有些不同

十一、egrep正則表達式之字符匹配

. 任意單個字符

[] 指定范圍的字符

[^] 不在指定范圍的字符

字符匹配和grep的用法相同


十二、egrep正則表達式之次數匹配

*:匹配前面字符任意次

?: 0或1次

+:1次或多次

{m}:匹配m次

{m,n}:至少m,至多n次

可以看出egrep正則表達式的次數匹配表達方式比grep少了"\"

十三、egrep正則表達式之位置錨定

^:行首

$ :行尾

\<, \b :語首

\>, \b :語尾

位置矛錨定和grep表達方式一樣

十四、egrep正則表達式之分組表達

()

后向引用:\1,\2,…

分組表達方式比grep少了"\"


十五、egrep正則表達式之或者方式表達

a|b

C|cat: C或cat

(C|c)at:Cat或cat


十六、egrep的練習

1、顯示當前系統root、mage或wang用戶的UID和默認shell

16.png

2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行

    需要注意的是擴展正則表達式中()表示的是分組的意思,所以需要加上轉義字符

17.png

18.png

3、使用egrep取出/etc/rc.d/init.d/functions中其基名(basename)

19.png

4、使用egrep取出上面路徑的目錄名

20.png

5、統計以root身份登錄的每個遠程主機IP地址的登錄次數

21.png

6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255

[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]25[0-5]

7、顯示ifconfig命令結果中所有IPv4地址

22.png

8、正則表達式表示身份證號

1.png

9、正則表達式表示手機號

   echo "18883797175" | grep -E -o "\<1[3578][0-9]{9}\>"

  10、正則表達式表示郵箱

  egrep "\<([[:alnum:]]+|_)*@([[:alnum:]]+\.)+[[:alnum:]]+" sid.txt

  11、正則表達式表示QQ號

  grep –E –o “\<[1-9][0-9]{4,12}\>”



原創文章,作者:xiaoqing,如若轉載,請注明出處:http://www.www58058.com/30263

(0)
xiaoqingxiaoqing
上一篇 2016-08-15 09:26
下一篇 2016-08-15 09:26

相關推薦

  • find和grep命令練習

                                    find和grep命令練習 1、顯示當前系統上root,fedora,或user1用戶的默認shell; ~]# cat /etc/pa…

    Linux干貨 2016-10-23
  • vim文本編輯器

    vi簡介 vi:Visual Interface,是一種功能強大的文本編輯器,工作在字符模式下,它可執行輸出、輸出、查找、替換、塊等眾多文本操作,不需要圖形界面,因此執行起來效率會非常高,主要用來編輯純文本文件,常見的編碼有,ASCII,Unicode等等 文本編輯器的種類:     行編輯器:逐行來對文本進行處理的工…

    Linux干貨 2016-08-15
  • Linux軟件包管理之程序包編譯安裝

    程序包編譯 程序包編譯安裝: Application-VERSION-release.src.rpm–>      安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝 源代碼–>預處理–>編譯(gcc)–>匯編&#82…

    Linux干貨 2016-08-25
  • 重構-改善既有代碼的設計:編寫代碼22宗罪(三)

    1 Duplicated  Code重復代碼        不同的地方出現相同的程序結構:         如果你在一個以上的地點看到相同的程序結構,那么可以肯定:設法將它們和而為一,程序會變得更好。最常見的“重復代碼”就是一個類內的兩個函數含有相同的表達式。另一種常見…

    Linux干貨 2015-04-07
  • CentOS6 網絡管理之網卡配置及簡單路由設置

    CentOS6中關于網絡配置的命令有很多,本文將介紹幾個平時最長用的幾個命令,以及網卡IP地址的配置和簡單路由配置。 1、經常使用的查看IP地址命令為 ifconfig,不跟參數的情況下默認查看所有已啟用的網卡信息,如下圖所示: 如果想查看具體某塊網卡信息,則可以在ifconfig后面跟上網卡設備,如只查看eth0的信息則執行:ifconfig eht0 即…

    Linux干貨 2016-09-05
  • Linux之文件管理及范例

    1、Linux上的文件管理命令   目錄管理類命令:mkdir,rmdir    mkdir [OPTION]… DIRECTORY…     -p: 自動按需創建父目錄;     -v: verbose,顯示…

    Linux干貨 2016-09-27
欧美性久久久久