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
下一篇 2016-08-15

相關推薦

  • ?文本編輯器nano

    新建/打開文件     nano 路徑+文件名,文件存在則為打開,否則新建;(未輸入文件名,編輯完成后,保存退出會提示輸入文件名); nano     note:nano中,黑底白字表示快捷鍵操作。其中“^”表示Ctrl鍵,則Ctrl+G就表示成“^G”?!癕”表示 Alt鍵,則Alt+W表示為“M…

    Linux干貨 2016-05-05
  • 編譯安裝Apache

    實驗環境:CentOS 6 安裝包版本:httpd-2.2.29.tar.bz2 一、安裝前準備     (1)、獲取httpd-2.2.29.tar.bz2安裝包     (2)、準備開發工具,安裝相應的包組 yum groupinstall -y&nbsp…

    Linux干貨 2016-08-24
  • N25期第三周作業

    1.列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可 who|awk ‘{print $1}’|sort -u 2.取出最后登錄到當前系統的用戶的相關信息 last -1 3.取出當前系統上被用戶當作其默認shell的最多的那個shell cat /etc/passwd|awk -F: ‘{print $NF}’|sort…

    Linux干貨 2016-12-12
  • N25期第一周作業

    計算機的組成與功能  一臺能正常工作的計算機有硬件和軟件組成,計算機的硬件就好比人的軀體,計算機的軟件就好比人的思想,人的思想控制指揮人的軀體,計算機有了軟件才能進行工作。 硬件大致由CPU,內存,輸入輸出設備,存儲設備組成,各個部件的主要作用流程是:由輸入設備(例如:鍵盤)輸入數據, 數據暫時出入內存, 而后由內存傳到CPU(CPU又由運算器+控…

    Linux干貨 2016-12-05
  • Linux基礎指令(2)

    4.文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息?  元數據定義:      數據(Metadata),又稱中介數據、中繼數據,為描述 數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如…

    Linux干貨 2016-11-09
  • awk中pipe的shell命令調用與close()

        某公司其員工到勤時間表如下, 取名為 arr.dat, 文件中第一欄為員工代號, 第二欄為到達時間. 本示例中將使用該文件為數據示例文件, 1034 7:26 1025 7:27 1101 7:32 1006 7:45 1012 7:46 1028 7:49 1051 7:51 1029 7:57 1042 7…

    Linux干貨 2016-11-11
欧美性久久久久