一、作用:
grep: Global serch REgular expression and Print out the line.
文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查;打印匹配到的行;
二、常用選項:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE....]
OPTIONS:
--color=auto: 對匹配到的文本進行着色後高亮顯示;
-i: ignorecase,忽略字符大小寫;
-o: 僅顯示匹配到的字符串本身;
-v: 反向顯示;
-E: 支持使用擴展的正則表達式元字符;
-q,--quiet, --silent:靜默模式,即不輸出任何信息;
-A #:after,後#行
-B #:before, 前#行
-C #:conext, 前後各#行
基本正則表達式元字符:
字符匹配:
.:匹配任意單個字符;
[]:匹配指定範圍內的任意單個字符;
[^]:匹配指定範圍外的任意單個字符;
匹配次數:用在要指定其出現的次數的字符的後面,用於限制其前面的字符出現的次數;默認工作於貪婪模式;
*:匹配其前面的字符任意次;0,1,多次;
.*:匹配任意長度的任意字符;
\?:匹配其前面的字符0次或1次;即其前面的字符是可有可無的;
\+:匹配其前面的字符1次或多次;即其前面的字符要出現至少1次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次;
\{m,\}:至少m次;
位置錨定:
^:行首錨定;用於模式的最左側;^root
$:行尾錨定;用於模式的最右側;
^PATTERN$: 用於PATTERN來匹配整行;
^$: 空白行;
^[[:space:]]*$:空行或包含空白字符的行;
單詞:非特殊字符組成的連續字符(字符串)都稱爲單詞;
\<或\b: 詞首錨定,用於單詞模式的左側;
\>或\b: 詞尾錨定,用於單詞模式的右側;
\<PATTERN\>: 匹配完整單詞;
分組及引用:
\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理;
Note:分組括號中的模式匹配到的內容會被正則表達式引擎自動記錄於內部的變量中,這些變量爲:
\1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
\2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
\3:模式從左側起,第三個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
...
grep "\(l..e\).*\1" love.txt 後面的\1可以引用\(l..e\)中的內容;
後向引用:引用前面的分組括號中的模式所匹配到字符;
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE....]
選項:-i, -o, -v, -q, -A, -B, -C
-G:支持基本正則表達式
擴展正則表達式的元字符:
字符匹配:
次數匹配:
*:任意次,0,1或多次;
?:0次或1次,其前的字符是可有可無的;
+:其前字符至少1次;
{m}: 其前的字符m次;
{m,n}:至少m次,至多n次;
{0,n}:
{m,}
位置錨定:
分組及引用:
():分組:括號內的模式匹配到手字符會被記錄於正則表達式引擎的內部變量中;
後向引用:\1,\2,...
或:
a|b: a或者b:
C|cat: C或cat
(c|C)at: cat或Cat
三、命令示例:
找出/etc/fstab文件中的空白行數量
~]# grep "^$" /etc/fstab | wc -l
1
找出/etc/passwd文件中用戶爲root的行
~]# grep "^root\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
找出/etc/passwd文件中用戶名與shell名相同的行
~]# grep --color -E "^([^:]+\>).*\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
找出/proc/meminfo文件中M或S開頭的行
~]# grep -E "^(M|S)" /proc/meminfo
MemTotal: 808160 kB
MemFree: 488092 kB
SwapCached: 0 kB
Mlocked: 0 kB
SwapTotal: 2072572 kB
SwapFree: 2072572 kB
Mapped: 15460 kB
Shmem: 236 kB
Slab: 75108 kB
SReclaimable: 16084 kB
SUnreclaim: 59024 kB
顯示/etc/inittab文件中以一個字母開頭的行
~]# grep "^[a-z]" /etc/inittab
id:3:initdefault:
找出ifconfig命令結果中的1-255之間的整數
~]# ifconfig | grep -E --color "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
eth0 Link encap:Ethernet HWaddr 00:0C:29:12:BA:26
inet addr:172.16.249.45 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::20c:29ff:fe12:ba26/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX bytes:23544203 (22.4 MiB) TX bytes:14827318 (14.1 MiB)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1