grep:文本過濾工具 支持BRE egrep: 支持ERE fgrep: 不支持正則 作用:根據用戶指定的“模式”,對目標文本逐行進行匹配檢查,列印匹配到的行 模式:由正則表達式字元及文本字元所編寫的過濾條件 [OPTIONS] PATTERN [FILE...] options: -v:顯示不被 ...
grep:文本過濾工具 支持BRE
egrep: 支持ERE
fgrep: 不支持正則
作用:根據用戶指定的“模式”,對目標文本逐行進行匹配檢查,列印匹配到的行
模式:由正則表達式字元及文本字元所編寫的過濾條件
[OPTIONS] PATTERN [FILE...]
options:
-v:顯示不被PATTERN匹配的行 排除
# 顯示/etc/passwd文件中不以/bin/bash結尾的行 grep -v '/bin/bash$' /etc/passwd
-i:忽略字元大小寫
-n:顯示匹配的行號
-c:顯示匹配的行數
-o:僅顯示被匹配的字元串
-q:靜默模式,不輸出任何信息
-A #:after,後#行
-B #:before,前#行
-C #:context,前後各#行
-e:實現多個選擇間的邏輯or關係
-w:整行匹配整個單詞
-E:使用擴展的正則表達式 相當於egrep
-F:使用fgrep,不支持正則表達式 相當於fgrep
--color:將過濾出內容加上顏色顯示
alias grep='grep --color=auto'
[root@centos6 ~ 01:43:05]#grep -i "^s" /proc/meminfo SwapCached: 0 kB SwapTotal: 1535996 kB SwapFree: 1535996 kB Shmem: 228 kB Slab: 88064 kB SReclaimable: 61960 kB SUnreclaim: 26104 kB [root@centos6 ~ 01:43:24]#grep "^[sS]" /proc/meminfo
基本正字表達式BRE:
字元匹配:
.:匹配任意單個字元
[]:匹配指定範圍內的任意單個字元
[^]:匹配指定範圍外的任意單個字元
以下是元字元:
[:digit:]:數字
[:lower:]:小寫字母
[:upper:]:大寫字母
[:alpha:]:所有字母
[:space:]:空白字元
[:alnum:]:所有字母及數字
[:punct:]:所有標點符號
[:graph:]:可列印的非空白字元;
[:blank:]:水平空白字元(空格和製表符)
[:cntrl:]:不可列印的控制字元(退格、刪除、警鈴)
[:pirnt:]:列印字元
[:xdigit:]:十六進位數字
# 顯示/etc/grub2.cfg文件中,至少一個空白字元開頭的且後面存非空白字元的行 grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg # 找出“netstat -ant” 命令的結果中以“listen”後跟0,1或多個空白字元結尾的行 netstat -ant |grep "listen[[:space:]]*$" # 註意,使用元字元時,字元本身的中括弧外,還需要加一層中括弧 # 添加用戶bash,testbash,basher以及nologin,而且找出/etc/passwd 文件中用戶名同shell名的行 useradd bash useradd testbash useradd basher useradd -s /sbin/nologin login grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd
# 顯示/var目錄下所有以L開頭,以一個小寫字母結尾,且中間出現至少以為數字的文件或目錄
ls -d /var/L*[0-9]*[[:lower:]]
# 顯示/etc目錄下,以任意一位數字開頭,且以非數字結尾的文件或目錄
ls -d /etc/[0-9]*[^0-9]
ls -d /etc/[[:digit:]]*[^[:digit:]]
# 顯示/etc目錄下,以非字母開頭,後面跟了一個字母及其其他任意長度任意字元的文件或目錄
ls -d /etc/[^[:alpha:]][[:alpha:]]*
次數匹配:
用在要指定次數的字元後面,用於指定前面的字元要出現的次數
*:匹配前面的字元任意次
.*:匹配任意長度的任意字元
\?:匹配前面的字元0次或1次
\+:匹配前面的字元至少1次,至多不限
\{M\}:匹配前面的字元M次
\{M,\}:匹配前面的字元至少M次,至多不限
\{M,N\}:匹配前面的字元至少M次,至多N次
位置錨定:
^:行首錨定,用於模式的最左側
$:行尾錨定,用於模式的最右側
^$:空白行,連space也不允許出現
^[[:space:]]*$:空白行或包含空白字元的行
\<或\b:詞首錨定,出現在單詞的左側
\>或\b:詞尾錨定,出現在單詞的右側
\<PATTERN\>:完整匹配單詞
# 去除nginx.conf裡面的的空行和註釋行 grep -Ev "^$|#" nginx.conf
^$ 空行
| 或者
# 註釋行開頭字元
分組及引用:
\(\):將一個或多個字元捆綁在一起,當作一個整體進行處理
後向引用:
引用前面的分組括弧中的模式所匹配的字元
分組括弧中的模式匹配到的內容會被正則表達式引擎記錄與內部的變數中,這些變數的命名
方式為\1,\2,\3
\1: 從左側起,第一個左括弧以及與之匹配右括弧之間的模式所匹配的字元
\(ab\+\(xy\)*\)
\1: ab\+\(xy\)*\
\2: xy
egrep及擴展正則表達式(Extandard RegExp):
字元匹配:
.:任意單個字元
[]:指定範圍內的任意單個字元
[^]:指定範圍外的任意單個字元
次數匹配:
*:任意次
?:0次或1次
+:其前一次最少一次或多次
{m}:匹配其前字元m次
{m,n}:匹配其前字元最少m次,最多n次
位置錨定:
^:行首錨定,用於模式的最左側
$:行尾錨定,用於模式的最右側
^$:空白行,連space也不允許出現
\<或\b:詞首錨定,出現在單詞的左側
\>或\b:詞尾錨定,出現在單詞的右側
分組及引用:
():分組;括弧內的模式匹配到的字元會被記錄到正則表達式引擎的內部變數中
後向引用:\1,\2,\3....
或:
| a|b a或者b