文本處理工具之grep
一、grep的簡介
1、grep是一個文本過濾器的工具,它根據用戶指定的模式(pattern)對目標文本進行匹配檢查,并將匹配的行打印到標準輸出或輸出重定向。
2、模式:由文本字符或正則表達式組成
3、正則表達式分兩類:
基本正則表達式
擴展正則表達式
二、grep工具
grep的基本語法
grep [OPTIONS] PATTERN [FILE…]
選項:
-i:忽略字符大小寫
-v:顯示不能被模式匹配的行
-o:僅顯示匹配的字符串
-q:靜默模式,不輸出任何信息(多用于腳本)
-c:顯示統計到的行數,等同于wc -l
-e:指定多個搜索條件
-A #:匹配到的后#行
-B #:匹配到的前#行
-C #:匹配到的前后個#行
-E :是擴展正表達式
-n :表示顯示行號
三、基本正則表達式的元字符
1、字符匹配:
. :任意單個字符
[] :匹配范圍內任意單個字符,(如:[abc]表示可以是a 或b或c中的任意一個)
[^]:匹配范圍外的任意單個字符
幾種常用的特殊的字符集:
[:alnum:] 數字和字符
[:alpha:] 英文大小寫字符 a-z A-Z
[:lower:] 小寫字母
[:upper:] 大寫字母
[:space:] 專門匹配空格
[:digit:] 十進制數字
[:xdigit:]十六進制數字
[:punct:] 標點符號
2、次數匹配
* :表是其前字符任意次
\?:表示其前字符0次或一次
\+:表示其前字符至少一次
\{m\}:表示其前字符m次
\{m,n\}:表示其前字符至少m最多n次
\{0,n\}:表示其前字符最多n次
\{m,\}:表示其前字符至少m次
3、位置錨定:
^ :錨定行首 (如:“^root”表示以“root”字符串作為行的開頭)
$ :錨定行尾 (如:“root$”表示以“root”字符串作為行的行尾)
\<或\b:詞首錨定
\>或\b:詞尾錨定
^$:表示空行,但不包含空白字符
^[[:space:]]*$:表示空行,包含空白字符
\<PATTERN\>等同于\bPATTERN\b:表示匹配整個單詞
4、分組
\(\)
分組是將一個或多個字符綁定在一起,當作一個整體來處理(比如后向引用:\1 \2 …)。
示例 :\(adc\(xyz\)\)利用后向引用
\1:表示第一個左括號以及與其匹配的右括號之間的匹配到的內容。本例中\1表示:abc\(xyz\)
\2:表示第二個左括號以及與其匹配的右括號之間的匹配到的內容。本例中\1表示:xyz
5、基本正則表達式的使用
(1)顯示/etc/passwd中不以/sbin/nologin結尾的行
(2) 顯示/etc/fstab文件中以#號開頭的行
(3)顯示root單詞在/etc/passwd的文件中出現的次數
(4)找出當前系統上用戶名和其默認shell相同的用戶
(5)統計/etc/init.d/functions文件中每個單詞出現的次數,并統計出前十名
四、擴展正則表達式
1、字符匹配:
. :任意單個字符
[] :匹配范圍內任意單個字符,(如:[abc]表示可以是a 或b或c中的任意一個)
[^]:匹配范圍外的任意單個字符
2、次數匹配
* :表是其前字符任意次
?:表示其前字符0次或一次
+:表示其前字符至少一次
{m}:表示其前字符m次
{m,n}:表示其前字符至少m最多n次
{0,n}:表示其前字符最多n次
{m,}:表示其前字符至少m次
3、位置錨定
擴展正則表達式中的位置錨定和基本正則表達式相同
4、分組
():與基本正則表達式相比去掉了“\”轉義,用法和基本正則表達式相同
5、擴展正則表達式也可以用 “egrep”這個文本處理工具,它等同于 “grep -E”
它倆的用法一致
6、擴展正則表達式的使用
(1)取出路徑/etc/passwd的基名和路徑名
(2)在/etc/passwd文件中以root開頭行,并且行內至少再有一個root單詞的行
(3)顯示/etc/fstab 文件中以#開頭其后跟了至少一個空白字符的行
原創文章,作者:zq,如若轉載,請注明出處:http://www.www58058.com/74857