文本處理中比較強悍的三個工具是:grep、sed、awk。
其中grep主要作用是對于用戶給出“模式”對文本逐行進行匹配檢查,然后進行打印。
模式:由正則表達式字符及文本字符編寫的過濾條件
格式:grep [選項] [正則表達式字符] 文件
常用的選項:
-v:反向查找,顯示沒有被匹配的的行
-i:不區分大小寫
-o:只顯示查找的內容
-n:顯示匹配的行號
-c:統計匹配的行數
-q:不輸出任何內容
-A #:顯示出查找到的內容的后#行
-B #:顯示出查找到的內容的前#行
-C #:顯示出查找到的內容的前后各#行
-e:實現多個選項之間或的關系 例如:grep -e 'root' -e 'bash' file
-w:整行匹配整個單詞
-E:使用此選項開啟egrep
各個選項示例:
-v選項:
示例:不顯示f1文件中帶有數字的行
[root@myhost testdir]# cat f1
ni hao
aaaaaa123
345 bbbbb
[root@myhost testdir]# grep -v [[:digit:]] f1
ni hao
-i選項:
示例:查找出文件中含有大小寫a的行
[root@myhost testdir]# cat f1
ni hao
AAA123
345 bbbbb
[root@myhost testdir]# grep -i a f1
ni hao
AAA123
-n選項:
示例:查找出含有root的字符串并顯示行號
[root@myhost testdir]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
-o選項:
示例:在/etc/passwd文件中查找出root字符串
[root@myhost testdir]# grep -o root /etc/passwd
root
root
root
root
-c選項:
示例:統計出/etc/passwd文件中以/bash/nologin結尾的一共有多少行
[root@myhost testdir]# grep -c "/sbin/nologin" /etc/passwd
29
-A選項:
示例:過濾出lisi用戶所在行及后一行
[root@myhost testdir]# grep lisi -A 1 /etc/passwd
lisi:x:502:502::/home/lisi:/bin/bash
wangwu:x:503:503::/home/wangwu:/bin/bash
-B選項:
示例:過濾出mysql系統用戶行及前兩行
[root@myhost testdir]# grep mysql -B 2 /etc/passwd
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
-C選項:
示例:過濾出mail系統用戶所在行及前后各一行
[root@myhost testdir]# grep mail -C 1 /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
-e選項:
示例:過濾出f1文件中包含數字或小寫字母的行
[root@myhost testdir]# cat f1
ni hao
AAA123
345 bbbbb
[root@myhost testdir]# grep -e"[0-9]" -e "[a-z]" f1
ni hao
345 bbbbb
-w選項:
示例:查找出f1文件中的含有which單詞的行
[root@myhost testdir]# cat f1
which
whichabc
abcwhich
[root@myhost testdir]# grep -w which f1
which
[root@myhost testdir]# grep which f1
which
whichabc
abcwhich
-E選項
正則表達式篇:
正則表達式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”)。模式描述在搜索文本時要匹配的一個或多個字符串其中有 些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
正則表達式分為兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
元字符分類::字符匹配、匹配次數、位置錨定、分組
字符匹配:
. : 匹配任意一個字符
[] :匹配指定范圍內的任意一個字符
[^] :匹配除指定范圍外的任意一個字符
字符集:
[:digit:] : 代表所有數字
[:lower:] : 代表所有小寫字母
[:upper:] : 代表所有大寫字母
[:alpha:] : 代表所有大小寫字母
[:alunm:] : 代表所有字母和數字
[:space:] : 代表空格和Tab
[:punct:] : 代表所有標點符號
匹配次數:用在要指定的字符后,用于指定前面字符要出現的次數
*:匹配前面字符任意次包括0次
.*:匹配任意長度的任意字符
\?:匹配前面的字符0次或一次
\+:匹配前面的字符至少一次
\{m\}:匹配前面字符m次
\{m,n\}:匹配前面字符至少m次至多n次
\{,n\}:匹配前面字符至多n次
\{m,\}:匹配前面字符至少m次
位置錨定:定位字符出現的位置
^:行首錨定,用于模式的最左側
$:行尾錨定,用于模式的最右側
^模式$ :用于模式匹配整行
^$:表示空行
\< 或 \b 詞首錨定,用于錨定詞的左側
\> 或 \b 詞尾錨定,用于錨定詞的右側
\<模式\> 用于錨定整個單詞
分組:\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如:\(root\)\+
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3,…
\1: 從左側起,第一個左括號以及與之匹配右括號之間 的模式所匹配到的字符;
實例: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分組括號中的模式所匹配字符(而 非模式本身)
原創文章,作者:ZJM,如若轉載,請注明出處:http://www.www58058.com/30189