歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux運維利器--Grep命令及正則表達式

Linux運維利器--Grep命令及正則表達式

日期:2017/2/28 14:48:32   编辑:Linux教程

grep, egrep, fgrep

grep: 根據模式搜索文本,並將符合模式的文本行顯示出來。

總結內容:

1、grep常用參數

2、grep正則表達式元字符集(基本用法)及高級用法

3、與正則相關的POSIX特殊字符類

語法:grep [options]PATTERN [FILE...]

grep中常用的幾個參數:

-r 遞歸匹配

-E 高級擴展功能與egrep功能相似

-i 忽略大小寫差別

-v 反向匹配,只顯示不匹配的行

-w 如果被\<和\>引用,就把表達式做為一個單詞搜索(單詞匹配)

如:netstat -ntlp |grep"\<80\>"

grep -w'main' /usr/include/*.h

-n 顯示匹配行及行號

-l 用於多文件查找,查詢多文件時只輸出包含匹配字符的文件名

grep -l -r -i -w 'filename_max' /usr/include/*.h

--color 高亮顯示匹配

-c 只打印匹配的行數,不顯示匹配的內容

-o:只顯示被模式匹配到的字符串

grep正則表達式元字符集(基本用法)

匹配次數(貪婪模式):
. 匹配一個非換行符的字符 如:'gr.p'匹配gr後接一個任意字符,然後是p。
* 匹配零個或多個先前字符 如:'*grep'匹配所有一個或多個空格後緊跟grep的行。

.* 一起用來表示任意字符。
\? 匹配其前面的字符1次或0次。

x\{m\} 連續重復字符x,m次,如:'o\{5\}'匹配包含連續5個o的行。
x\{m,\} 連續重復字符x,至少m次,如:'o\{5,\}'匹配至少連續有5個o的行。
x\{m,n\} 連續重復字符x,至少m次,不多於n次,如:'o\{5,10\}'匹配連續5--10個o的行。

元字符:
[] 匹配一個指定范圍內的字符,如'[Gg]rep'匹配Grep和grep。
[^] 匹配一個不在指定范圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。

位置錨定:

^: 錨定行首,此字符後面的任意內容必須出現在行首

$: 錨定行尾,此字符前面的任意內容必須出現在行尾
\<或\b 錨定單詞的開始,如:'\<grep'匹配包含以grep開頭的單詞的行。
\>或\b 錨定單詞的結束,如'grep\>'匹配包含以grep結尾的單詞的行。

分組:

\(\)

\(ab\)*

後向引用

\1: 引用第一個左括號以及與之對應的右括號所包括的所有內容

\2:

\3:


\w 匹配一個文字和數字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G後跟零個或多個文字或數字字符,然後是p。
\W w的反置形式,匹配一個非單詞字符,如點號句號等。\W*則可匹配多個。
\b 單詞鎖定符,如: '\bgrep\b'只匹配grep,即只能是grep這個單詞,兩邊均為空格。

多個關鍵字查找

1.1 使用-e

grep -e 'stdio\.h' -e 'stdlib\.h' /usr/include/*.h

1.2 使用-f file

將關鍵字以行方式保存在一個文件中

1.3 使用元字符 \|

grep 'stdio\.h\|stdlib.h' /usr/include/*.h

關於egrep和grep -E的高級用法:

+ 匹配一個或多個先前的字符。如:'[a-z]+able',匹配一個或多個小寫字母後跟able的串,如loveable,enable,disable等。  

? 匹配零個或多個先前的字符。如:'gr?p'匹配gr後跟一個或沒有字符,然後是p的行。  a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed   

() 分組符號,如:love(able|rs)ov+匹配loveable或lovers,匹配一個或多個ov。  x,x{m,},x{m,n}   作用同x\{m\},x\{m,\},x\{m,n\}

POSIX特殊字符類:可以通過 man 7 glob查看。。。

[:alpha:]   文字字符 [A-Za-z]

[:digit:]   數字字符 [0-9]

[:graph:]   非空字符(非空格、控制字符)

[:lower:]   小寫字符 [a-z]

[:upper:]   大寫字符 [A-Z]

[:alnum:] [0-9a-zA-Z]

[:cntrl:]   控制字符 

[:print:]   非空字符(包括空格)

[:punct:]   標點符號

[:space:]   所有空白字符(新行,空格,制表符),制表符還可以用\t表示

[:xdigit:]   十六進制數字和字母(0-9,a-f,A-F)

���們在用時要這樣用:[[:alpha:]],如果取反就是[^[:digit:]]

Copyright © Linux教程網 All Rights Reserved