一.相關介紹git
(1)正則表達式:正則表達式
正則表達式就是處理字符串的方法,它是以單位來進行字符串的處理行爲,正則表達式經過一些特殊符號的輔助,能夠讓用戶輕易達到查找,刪除,替換某特定字符串的處理程序,正則表達式的做用就是讓咱們在編輯、處理文本文件的時候「飛起來」shell
注:書寫正則表達式的時候,你要熟悉文件的內容。正則表達式的書寫答案並不惟一;而且一個正則表達式並不適合全部的文件,有時是不可能一次就把答案寫出來的,須要反覆的修正。bash
(2) 文件類型ide
- 普通文件ui
d 目錄文件spa
b 設備塊文件3d
c 字符型文件blog
l 軟連接(符號連接)文件遞歸
p 管道文件
S 套接字文件
(3)bash通配符
[:alnum:] 字母+數字
[:alpha:] 字母
[:lower:] 小寫字母
[:upper:] 大寫字母
[:digit:] 十進制數
[:punct:] 符號
[:space:] 空白字符(空格 「tab」)
[[:alnum:]] 任意的一個字母或數字[a-Z0-9]
[^[:alnum:]] 取反
取反[[:alnum:]!]
二.正則表達式+grep
1.元字符列表:
(1) ^ //行首定位符
(2)$ //行尾定位符
(3). // 任意的單個字符,可是換行符除外
(4)* //匹配0個或多個它的前一個字符
(5)[] //匹配[] 包含的一組字符中的一個
(6)\ //轉義符,去掉特殊符號的意義
(7)\{m\} //前面的x出現m次
\{m,\} //前面的x出現 >= m 次
\{m,n\} //前面的x出現 m~n 次
(8)\(\) //標籤
(9)\< //詞首定位符
\> // \> 詞尾定位符
注:如下截圖有的爲部分截圖
例1. ^ 行首定位符
(1)[root@tx3 ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
(2)對結果就行取反(第三部分會對grep命令進行詳細介紹)
[root@tx3 ~]# grep -v ^root /etc/passwd
(3)列出行號
例2. $行尾定位符
[root@tx3 ~]# grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
tx:x:500:500:tx:/home/tx:/bin/bash
例3. .意的單個字符,可是換行符出外
(1)r和t之間匹配兩個字符
例4. * 匹配0個或多個它的前一個字符
注 .* 匹配全部
例5. [] 匹配[] 包含的一組字符中的一個
[abc] 中的一個
支持「-」的連字符
[0-9] 任意的數字
[a-z] 任意的小寫字母
[A-Z] 任意的大寫字母
[a-Z] 任意字母
[a-Z0-9] 任意的字母或數字
取反 [^ ]
[^0-9] 任意的非數字
[^a-z] 任意的非小寫字母
[^A-Z]
[^a-Z]
[^a-Z0-9] 任意的符號
(1)找出uid是2位數的行:
(2)匹配第1個字段是4個字符的行,兩種方法
例6. \ 轉義字符:屏蔽元字符的含義
例7. x\{m\} :前面的x出現m次
x\{m,\} :前面的x出現 >= m 次
x\{m,n\} :前面的x出現 m~n 次
(1)上面的匹配第1個字段是4個字符的行,用這種方法作
[root@tx3 ~]# grep "^[^:]\{4\}:" /etc/passwd
[root@tx3 ~]# grep "^[a-Z]\{4\}:" /etc/passwd
(2)
例8. \(\)標籤,保存包起來的字符,後面能夠調用。最多能用9個
如何調用?-------->從左向右依次的順序是1-9
\1 \2
[root@tx3 ~]# grep "root.*root.*root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@tx3 ~]# grep "\(root\).*\1.*\1" /etc/passwd
root:x:0:0:root:/root:/bin/bash
例9.\< 詞首定位符 \> 詞尾定位符
單詞: 連續的字母或數字
三. 擴展正則表達式
? //匹配前面的字符有0個或1個
+ //前面的字符有1個或多個
| //或
() //找出組字符串
()+ //多個組的判別
注:具體實例會結合egrep給出
四. grep家族(grep,egrep,fgrep)命令相關介紹
1. 在grep命令中輸入字符串參數時,最好將其用雙引號括起來。這樣作有兩個緣由,一個是防止被誤會是shell命令,二是能夠用來查找多個單詞組成的字符串
幾個經常使用的選項:(爲節省空間這裏只粘取一行)
(1)-n 顯示匹配行的行號
[root@tx3 ~]# grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
(2)-v 匹配內容取反
[root@tx3 ~]# grep -v "root" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
(3)-r 遞歸搜索
[root@tx3 ~]# grep -r "root" /etc/
(4)-l 遞歸搜索時只顯示文件名
[root@t1 123]# grep -hr "root" /etc
(5)-h 遞歸搜索時只顯示匹配行
[root@tx3 ~]# grep -hr "root" /etc/
(6)-c 統計匹配的行數
[root@tx3 ~]# grep -c "root" /etc/passwd
2
(7)-i 匹配的內容不區分大小寫
[root@tx3 ~]# grep -i "root" /etc/passwd
(8)顯示匹配行以及它周圍的行
-Anum after 下
-Bnum before 上
-Cnum 上下
(9) -E 至關於egrep能夠接擴展正則表達式
2. Egrep
egrep命令能夠接擴展的正則表達式(可參照grep)
3. fgrep
fgrep命令是用來查找一個或多個與給出的字符串或詞組相匹配文件中的行。fgrep 查詢速度比grep命令快,可是不夠靈活:它只能找固定的文本,它不識別正則表達式,是快速搜索命令。(參數可參照grep)
例1. ?匹配一個前面數字是2的(.須要轉義)
例2. + 前面的字符有1個或多個
例3. | 或
例4. ()找出組字符串
(1)
(2)能夠用{m}{m,}{m,n}匹配個數
例5. 多個組的判別
例6. fgrep不支持正則表達式