1. 程式人生 > >正則表達式-grep命令

正則表達式-grep命令

grep

1. 基本的正則表達式 grep

^a 表示匹配以a開頭的行;

a$ 表示匹配以a結尾的行;

^$ 表示空白行;

. 表示匹配任意一位字符;

* 表示匹配其前面字符的任意次(可以是0次);

.* 表示匹配任意字符任意次;

\? 表示匹配前面字符1次或0次;

a\{3,5\}表示匹配前面字符的至少3次,最多5次;

[a-z] 表示匹配任意一個字母;

[a-Z] 表示匹配任意一個字母(不區分大小寫);

[1-9] 表示匹配任意數字;

[^1-9] 表示匹配不是數字;

[a-Z0-9]表示匹配數字和所有字母;

[[:alnum:]] 表示匹配數字和所有字母;

[[:space:]] 表示匹配空格;

[[:punct:]] 表示匹配標點符號

\<或\b 表示匹配<符號後面的單詞,必須做為首部出現 比如 \<abc

\>或\b 表示匹配>符號前面的單詞,必須做為尾部出現 比如 abc\>


\( \) 表示分組 一般和後向引用合用;

後向引用

\1 引用前面第一個分組

\2 引用前面第二個分組

\3 引用前面第三個分組

[[email protected] ~]# grep "\(a\)\(b\)c\1xc\1\2c" test.txt

abcaxcabc


2. 擴展的正則表達 egrep或grep -E

+

表示匹配前面字符至少1次;

? 表示匹配前面字符1次或0次;

{} 表示匹配前面字符的多少次;

() 表示分組

| 表示或者


3.grep命令

-i 不區分大小寫

-v 取反

-o 顯示字符串本身

-n 輸出時顯示行號

-E 支持擴展正則表達式 等效 egrep

-A 顯示匹配字符的之後N行

-B 顯示匹配字符的之前N行

-C 顯示匹配字符的前後N行

-r 遞歸匹配全部文件


4.基本正則表達式應用舉例

1) 查詢/var/log/message文件中包含kernel的信息

[[email protected] ~]# grep kernel /var/log/messages


2) 查詢/etc/passwd文件中以root開頭的行

[[email protected] ~]# grep "^root" /etc/passwd

root:x:0:0:root:/root:/bin/bash


3) 查詢/etc/passwd文件中以nologin結尾的行,並計算行數

[[email protected] ~]# grep "nologin$" /etc/passwd


4) 查詢/usr/share/dict/words 文件中以a或b開頭的行

[[email protected] ~]# grep "^[a,b]" /usr/share/dict/words


5) 查詢/usr/share/dict/words文件中以不以 c,d,e,f(忽略大小寫)開頭的行,並計算行數

[[email protected] ~]# grep "^[^c-f]" /usr/share/dict/words | wc -l


6) 在/etc/passwd中選出所有不包含nologin 的行。

[[email protected] ~]# grep -v "nologin" /etc/passwd


7) 查詢/usr/share/dict/words文件中以a開頭且第三個字符是z的行

[[email protected] ~]# grep "^a.z" /usr/share/dict/words


8)查詢/usr/share/dict/words文件中以a開頭且後面跟隨5個字符的行

[[email protected] ~]# grep "^a.\{5\}$" /usr/share/dict/words


9)查詢你的系統的CPU有幾個核

[[email protected] ~]# grep "processor" /proc/cpuinfo | wc -l


10) 查詢/usr/share/dict/words文件中總共10位,且以z結尾的行。

[[email protected] ~]# grep "^.\{9\}z$" /usr/share/dict/words


11) 查詢/usr/share/dict/words文件中以 a,b,c開頭,且第5位只能為s的行

[[email protected] ~]# grep "^[a,b,c]...s" /usr/share/dict/words


12) 查詢/usr/share/dict/words文件中所有以兩位數字開頭的行

[[email protected] ~]# grep "^[1-9][1-9]" /usr/share/dict/words


13) 查詢/usr/share/dict/words文件中以a,b,c開頭的且不以a,b,c結尾行

[[email protected] ~]# grep "^[a,b,c].*[^a,b,c]$" /usr/share/dict/words


14)查詢/usr/share/dict/words文件中以小寫字母開頭,以大寫字母結尾的行

[[email protected] ~]# grep "^[a-z].*[A-Z]$" /usr/share/dict/words


5.擴展正則表達式

1)去除a.txt 空白行與#開頭的行

[[email protected] ~]# egrep -v "^$|^#" a.txt

2)搜索god good goood等字符串

[[email protected] ~]# egrep "go{1,3}d" a.txt


3)搜索gd 或者 god字符串的行

[[email protected] ~]# egrep "go?d" a.txt


本文出自 “feng” 博客,請務必保留此出處http://fengxiaoli.blog.51cto.com/12104465/1950972

正則表達式-grep命令