正則表達式-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次或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命令