正則表達式

正則表達式和元字符

1.1 正則表達式的基本格式

       regular expressiongit

       做用:正則表達式

              經過對文件中的內容進行過濾篩選,而後對文件的內容進行處理express

              常常用基於正則寫腳原本處理日誌文件vim

       構成:bash

              一堆特殊符號和字母構成--元字符spa

1.2 正則表達式的種類

       基本正則表達式日誌

       擴展正則表達式內存

1.3 正則表達式的使用

       一般會結合三個命令使用it

       grep;    sed;    awkio

grep命令

       做用:對文件中的內容進行逐行過濾

       格式:grep  [選項]  匹配內容  文件

       選項:

              -v:取反

              -o:僅僅顯示出所匹配到的內容

              --color:將匹配到的內容着色

              -E:使用擴展正則表達式

              -i: 忽略大小寫

例子:從文件a.txt中過濾出包含root的行

       # grep root a.txt

例子:從文件a.txt中過濾出不包含root的行

       # grep -v root a.txt

例子:從文件a.txt中找出所有的root(只顯示root)

       # grep -o root a.txt

例子:從文件a.txt中統計root的個數

       # grep -o root a.txt | wc -l

補充:

       環境變量配置文件 ~/.bashrc

實現設置永久別名

       vim  ~/.bashrc

              添加

              alias grep="grep --color"

 

注意:

       此時,不會馬上生效(須要讓系統從新取得配置文件到內存纔會生效)

讓系統重讀配置文件的方法

       1:重啓系統

       2:重啓服務

       3:手動加載配置文件

手動加載配置文件

       格式:source fileName

例子:讓系統讀取環境變量寫配置文件

       # source ~/.bashrc

通配符和正則的區別

       1. 通配符是對文件命進行匹配的;正則表達式是對文件的內容進行匹配的

       2. 正則表達式是要結合grep、sed、awk使用的

1.4 正則中的元字符

1、匹配單個字符

1). 表示任意一個字符(能夠是空格,逗號, 字母, 數字..)

2)[ ] 表示範圍內的一個字符

       用字母和數字的方式表示

              [12345] 表示1 或2 或3 或4 或5

              [1234567890] 表示 任意一個數字

              [abc] 表示a 或b 或c

              [a-z] 表示任意一個小寫字母

              [A-Z] 表示任意一個大寫字母

              [a-zA-Z] 表示任意字母

              [0-9a-zA-Z] 表示全部數字和字母的任一個

              例子:過濾出包含數字的行

                     grep [0-9] a.txt

       用字符集的方式表示

                     [:space:] 表示一個空格

                     [:digit:] 表示0-9所有十個數字

                     等價於 0123456789, 而不等價於[0123456789]

                     [[:digit:]] 表示任意一個數字

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

                     [:lower:] 等價於 abcdef....z

                     [[:lower:]] 表示任意一個小寫字母

                     [[:upper:]] 表示任意一個大寫字母

                     [[:alpha:]] 表示任意一個字母

                     [[:punct:]] 表示任意一個標點符號

                     [[:alnum:]] 表示任意一個數字和字母

       補充

              [[:digit:][:lower:]]

              [0123456789abcdefg.......z]

       例子:

              匹配空格或者數字或大寫字母

                     [[:space:][:digit:][:upper:]]

3)[^]

       匹配範圍之外的單個字符

       例子:匹配沒有數字1或者3 或7的行

              [^137]

       例子:過濾出沒有數字的行

              [^[:digit:]]

       例子:過濾出沒有數字和大寫字母的行

              [^[:digit:][:upper:]]

4)顯示匹配到的行的先後若干行

       -A n  顯示匹配行後的N行

       -B n  顯示匹配行前的N行

       -C n  顯示匹配行先後的各N行

       例子:從a.txt中過濾出包含數字2的行,同時顯示該行下的3行內容

              # grep -A3 "2" a.txt

5)次數匹配

       *   表示其前面的字符出現任意次數的狀況(0,1,n)

       .*  表示任意長度的任意字符

       ?  表示其前面的字符出現最多一次的狀況

       \{m,n\}   表示其前面的字符出現最少m次,最多n次的狀況

              \{3,\} 其前面的字符出現表最少3次

              \{,5\} 其前面的字符出現表最多5次

例子:

       a* 表示任意多個a(但是0 ,1, n)

       ab* 表示a後面的b出現任意屢次

例子:過濾出包含字母a和b的行,要求a在前,b在後

       # grep "a.*b" fileName

例子:

       "a\{2,5\}b"

6)位置錨定

       ^  表示以什麼爲開頭的行

       $  表示以什麼爲結尾的行

       \< 表示單詞首部

       \> 表示單詞尾部

       ^$ 表示空白行

例子:

       過濾出包含root的行

       # grep "root" a.txt

       過濾出以root爲開頭的行

       # grep "^root" a.txt

       過濾出以root爲結尾的行

       # grep "root$" a.txt

       過濾出以空格爲開頭的行

       # grep "^[[:space:]]" a.txt

       過濾出以多個空格後面是root爲開頭的

       # grep "^[[:space:]]\{1,\}root" a.txt

7)分組

       \(  \)  將一個內容當作一個總體看待

       \1      表示引用前面的第一個分組

       \2      表示引用前面的第二個分組

例子: 從文件a.txt中,過濾出出現過兩個相同數字的行

       # grep "\([[:digit:]]\).*\1" c.txt

1.5 擴展正則表達式

       基本正則:grep [選項] 匹配內容 文件

       擴展正則:

              方式1:grep -E 匹配內容 文件

              方式2:egrep 匹配內容 文件

主要多了兩個元自符:

1.次數匹配

+:其前面的字符出現至少一次的狀況效果等同於:{1,}            

例子:匹配a前有至少一個b的行

      [root@localhost tmp]# egrep "b+a" a.txt

              或者

          [root@localhost tmp]# grep -E "b+a" a.txt

        2.或

        |

       例子:從文件a.txt中過濾出cat 和Cat

       # grep -E "(c|C)at" a.txt

       或者

       # grep -E "cat|Cat" a.txt

補充:

       在基本正則表達式中,? {} () 須要在前面使用 \ 進行轉義

       在擴展正則表達式中是不須要的

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息