《LINUX教學:grep文本過濾工具與正則表達式》要點:
本文介紹了LINUX教學:grep文本過濾工具與正則表達式,希望對您有用。如果有疑問,可以聯系我們。
敕令:grep
格局:grep [OPTIONS] PATTERN
選項:? --color=auto 將匹配的成果著色顯示
-v 反向匹配
-i 忽略年夜小寫
-n 顯示的成果前增加行號
-c 僅顯示匹配到成果的行數
-o 僅顯示匹配到的字符串
-q 靜默模式,不輸出任何信息
相稱于 &> /dev/null
-A# 顯示癥結字行及向后#行
-B# 顯示癥結字行及向前#行
-C# 顯示癥結字向前#行,當前行,及向后#行
-e 癥結字1 -e 癥結字2? 實現多個選項間的邏輯or關系
-w 匹配整個單詞
-E 使用擴大正則表達式 或egrep
-F 不使用正則表達式 或 fgrep
Patten格局:引用變量或文本用“”or‘’引起來,
? ? ? ? ? ? ? ? ? ? ? 引用敕令則用``(反引號)引起來.
正則表達式是由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表現字符字面意義,而表現控制或通配的功能.支持程序有grep,sed,awk,vim,less,nginx,varnish……它分為基本正則表達式和擴展正則表達式兩類,用于grep中,則grep后支持基本正則表達式,grep -E或egrep后支持擴展正則表達式.
字符 |
寄義 |
. |
匹配單個字符 |
[] |
匹配指定規模內的任意單個字符 |
[^] |
匹配指定規模外的任意單個字符 |
[:alnum:] |
所有字母和數字 |
[:alpha:] |
所有年夜小寫字母(a-z&A-Z) |
[:lower:] |
小寫字母(a-z) |
[:upper:] |
年夜寫字母(A-Z) |
[:digit:] |
十進制數字(0-9) |
[:xdigit:] |
十六進制數字 |
[:blank:] |
空缺字符(空格和制表符tab) |
[:space:] |
程度和垂直的空白字符(比[:black:]范圍廣) |
[:punct:] |
標點符號 |
[:graph:] |
可打印的非空缺字符 |
[:print:] |
可打印字符 |
[:cntrl:] |
弗成打印的控制字符(退格、刪除、警鈴……) |
匹配次數用于要指定次數的字符后面,用于指定前面的字符要呈現的次數.
字符 |
寄義 |
* |
匹配前面的字符任意次,包含0次 ? ? ? (貪心模式:盡可能長的匹配) |
.* |
匹配隨意率性長度的隨意率性字符 |
\? |
匹配其前面的字符0次或1次 |
\+ |
匹配其前面的字符至少1次 |
\{n\} |
匹配其前面的字符n次 |
\{m,n\} |
匹配其前面的字符至少m次,至多n次 |
\{,n\} |
匹配其前面的字符至多n次 |
\{n,\} |
匹配其前面的字符至少n次 |
位置錨定用于定位呈現的位置.
字符 |
寄義 |
^ |
行首錨定,用于模式的最左側 |
$ |
行尾錨定,用于模式的最右側 |
^PATTERN$ |
用于模式匹配整行 ? ? ? ? ^$? 空行 ? ? ? ? ^[[:space:]]$? 空缺行 |
\< or \b |
詞首錨定,用于單詞模式的左側 |
\> or \b |
詞尾錨定,用于單詞模式的右側 |
\<PATTERN\> |
匹配整個單詞 |
說到后向引用,我們先要了解一個概念——分組.分組就是用()把一個或多個字符捆綁在一起,當做一個整體進行處理,當然,在我們的基本正則表達式中,()必要用\來轉義,所以,用法如下:
\(root\)\+? 代表匹配root至少一次
在分組括號中的模式匹配到的內容會被正則表達式引擎記錄與內部的變量中,這些變量的定名方式為:\1,\2,\3……
\n便是從左側起第n個左括號以及與之匹配的有括號之間的模式所匹配到的字符.
eg:\(string1\+\(string2\)*\)
? ? ? ? \1 :string1\+\(string2\)*
? ? ? ? \2 :string2
后向引用:引用前面的分組括號中的模式所匹配的字符,而非模式自己.
單說概念年夜家應該不會很明白,那我們來看一個例子,因為后向引用很重要,所以我們就說細致一點.(敲黑板!劃重點!)
這個是我們的文件,假如我們想匹配所有行,應該怎么做呢?就用到我們上面所說到的正則表達式的知識.
我們把這個命令零丁拉出來說:grep "^h.\{4\}.*h.\{4\}$" example
^h.\{4\}表現匹配以h后加任意4個字符為開頭,.*表現匹配任意多個字符,h.\{4\}$表現匹配以h后加任意4個字符為結尾.hello和hiiii都是以h后跟4個任意字符組成的,所以上述命令就可以匹配所有的行.
那么,如果我只想匹配開頭和結尾單詞一樣的行呢?也便是職匹配前兩行.這個時候,我們就要用到后向引用了,如下:
上述敕令就可以完成我們的需求,我們來詳細的說一下這個敕令.
分為兩部門:紅框內:\(h.\{4\}\)? 藍框內:\1
先說紅框內的,這個和我們上一個示例沒有區別,只是加了\(\)括起來,含義還是不變,依然表現h后跟任意4個字符.
那么藍框內呢?是什么意思?
“\1”表示的便是從左側起第1個左括號以及與之匹配的有括號之間的模式所匹配到的字符.上述我們只有一對括號,所以藍框內的“\1”表示的便是紅框內“\(h.\{4\}\)”所匹配到的內容.如果沒看明白,那么看看下面這張圖吧:
現在可以明白為什么要添加括號分組了嗎?因為當我們添加了括號分組,“h.\{4\}”就成為整個正則中第1個分組中的正則,當“h.\{4\}”匹配到的結果為hello時,“\1”引用的便是hello,當“h.\{4\}”匹配到的結果是hiiii時,“\1”引用的便是hiiii.
這個便是所謂的后項引用了.當然,\2,\3的內容相信也就不言而喻了.
命令:egrep? =? grep -E
格局:egrep [OPTIONS] PATTERN [FILE...]
擴展的正則表達式與正則表達式的元字符大致一樣.為什么叫他擴展的正則表達式呢?因為在擴展正則表達式中,除了詞首詞尾錨定和后項引用以外,其他的元字符都可以直接引用,不必要加“\”轉義.
講了這么多東西,我們來做一些題練練手吧~提供的答案僅為參考,因為分歧的解題思路,你的解題步驟也會有所分歧喏,小伙伴們盡情發揮吧(〃'▽'〃)
1、統計當前連接本機的每個長途主機IP的連接數,并按從大到小排序
netstat -tun |grep "[0-9]" |tr -s " " ":" |cut -d: -f6 |sort |uniq -c |sort -n
2、顯示/etc/passwd文件中不以/bin/bash結尾的行
cat /etc/passwd | grep -v /bin/bash$
3、找出/etc/passwd中的兩位或三位數
cat /etc/passwd |grep "\b[0-9]\{2,3\}\b"
4、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開首的且后面存非空白字符的行
cat /etc/grub2.cfg |grep "^[[:space:]]\+[^[:space:]].*$"
5、 使用egrep掏出/etc/rc.d/init.d/functions中其基名
echo /etc/rc.d/init.d/functions | egrep -o "[^/]+/?$"
6、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包含下劃線)后面跟一個小括號的行
cat /etc/rc.d/init.d/functions |egrep "^.*[^[:space:]]\(\)"
7、統計last敕令中以root登錄的每個主機IP地址登錄次數
last |grep ^root |egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" |sort |uniq -c
8、顯示ifconfig命令成果中所有IPv4地址
ifconfig | egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
9、顯示三個用戶root、mage、wang的UID和默認shell
cat /etc/passwd |egrep "^(root|mage|wang)\b" |cut -d: -f3,7
10、只利用df、grep和sort,取出磁盤各分區利用率,并從年夜到小排序
df |grep sd |grep -Eo "[0-9]{1,3}%" |sort -nr
Linux敕令-文件文本操作grep?
grep正則表達式
Linux中正則表達式與文件格式化處置命令(awk/grep/sed)
Linux根基之grep和正則表達式
14 個 grep 敕令的例子
Linux文本處置工具grep和正則表達式及egrep與grep區別?
Linux根基之-正則表達式(grep,sed,awk)?
Linux文本處置工具及grep? ?
grep敕令中文手冊(info grep翻譯)?
grep 命令系列:如安在 UNIX 中根據文件內容查找文件
本文永遠更新鏈接地址:
歡迎參與《LINUX教學:grep文本過濾工具與正則表達式》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7029.html