柚子快報(bào)激活碼778899分享:第六章 正則表達(dá)式
第六章 正則表達(dá)式
1,正則表達(dá)式概念
1,正則表達(dá)式(re),又稱規(guī)則表達(dá)式。用來(lái)處理字符串的方法,以行為單位進(jìn)行字符串的處理,通過(guò)一些特殊字符,讓用戶完成查詢,刪除,替換等目的。
2,在大多數(shù)程序里,RE都被置于兩個(gè)正斜杠之間,例如/I[oO]ve/。
3,RE通??s寫成regex,單數(shù)有regexp,regex;復(fù)數(shù)有regexps,regexes,regexen。
2,正則表達(dá)式元字符
1,RE由普通字符和元字符組成。
普通字符:包含大小寫字母和數(shù)字。元字符:具有特殊含義。
2,元字符通常由各種執(zhí)行模式匹配操作的程序來(lái)解析
3,正則表達(dá)式語(yǔ)法
RE是由普通字符(a~z)及特殊字符(稱為元字符)組成的文字模式。
RE可以是單個(gè)字符,字符集合,字符范圍,字符間的選擇等任意組合
4,正則表達(dá)式運(yùn)算符優(yōu)先級(jí)
RE從左到右進(jìn)行計(jì)算。相同優(yōu)先級(jí)的RE從左到右運(yùn)算,不同優(yōu)先級(jí)的RE運(yùn)算先高右低
5,正則表達(dá)式匹配規(guī)則
基本模式匹配
**模式是RE最基本的元素。**它是一組描述字符串特征的字符組成的字符集,用于匹配字符串。
\n:換行
\r:回車
\t:制表符
\f:換頁(yè)
字符簇
用連字符可以表示一個(gè)字符的范圍。
[a-z] #匹配所有 的小寫字母
[A-Z] #匹配所有的大寫字母
[a-zA-Z] #匹配所有的字母
[0-9] #匹配所有的數(shù)字
#^匹配開(kāi)頭(當(dāng)在方括號(hào)里表示非);$匹配結(jié)尾
^[^0-9][0-9]$ #第一個(gè)字符不能是數(shù)字
[^a-z] #除字母外的所有字符
[^$] #空行
#花括號(hào)的三種用法:
(1){x}:前面的字符只出現(xiàn)x次。
(2){x,}:前面的內(nèi)容出現(xiàn)x或多次。
(3){x,y}:前面的內(nèi)容至少出現(xiàn)x次,但不超過(guò)y次。
^[a-zA-Z0-9_ ]{1, }$ #所有包含一個(gè)以上的字母,數(shù)字或下畫線的字符串
^[1-9][0-9]{0, }$ #所有的正整數(shù)
^\-{0,1} [0-9]{1, }$ #所有的整數(shù)
^[ - ]?[0-9]+\.?[0-9]+$或^\-?[0-9]{1, }\.?[0-9]{1, }$ #所有的浮點(diǎn)數(shù)
6,grep命令
grep命令簡(jiǎn)介
grep命令是一種強(qiáng)大的文本搜索工具,是Linux文本處理工具中的三劍客之一。
通常grep有三個(gè)版本:grep、fgrep,egrep。
grep命令語(yǔ)法格式
#語(yǔ)法格式:
grep [options] pattern [filename]
找到匹配的表達(dá)式: grep返回的退出狀態(tài)為0
沒(méi)找到匹配的表達(dá)式: grep返回的退出狀態(tài)為1
找不到指定文件: grep返回的退出狀態(tài)為2
grep命令,可以來(lái)自標(biāo)準(zhǔn)輸入或管道
grep命令使用方式
-q,-v,-R(-r),-A,-B,-C,-o
針對(duì)“--color” 選項(xiàng),在.bashrc 或者.bash profile 文件中加入alias grep=grep -color- auto,生效后,grep的搜索結(jié)果自動(dòng)高亮匹配。
針對(duì)“搜索字符串”選項(xiàng),使用正則表達(dá)式時(shí)必須用單引號(hào)'括起來(lái),避免與Shell的元字符沖突。結(jié)合grep 與正則表達(dá)式,能快速準(zhǔn)確地找到希望匹配的字符串和行,提高工作效率。
grep命令結(jié)合正則表達(dá)式使用
其中,“\1”、“2”、$是后向引用,引用前面的分組括號(hào)中的模式所匹配的字符。在某行文本的檢查中,如果使用“()”, 則分組括號(hào)中的模式匹配的某內(nèi)容可以被引用。擴(kuò)展正則表達(dá)式與正則表達(dá)式略有不同。
grep命令結(jié)合正則表達(dá)式案例實(shí)戰(zhàn)
1,#使用egerp匹配文件中root字符串
[root@localhost ~]# egrep 'root' /etc/passwd /etc/shadow /etc/hosts
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:root:$6$YwwVMLULtamj9HkA$abG.jwCmQWMr.W9rWibB6y6WGfuVKM/BDdtCoc6OhKnfgHRLvGfeXnA37BILKUIlKMIplJyRd7W6X1jQIzCP.0::0:99999:7:::
2,#使用egrep列出匹配行的文件名
[root@localhost ~]# egrep -l 'root' /etc/passwd /etc/shadow /etc/hosts
/etc/passwd
/etc/shadow
3,#在每一行之前加上該行在文件中的相對(duì)行號(hào)
/etc/passwd:1:root:x:0:0:root:/root:/bin/bash
/etc/passwd:10:operator:x:11:0:operator:/root:/sbin/nologin
/etc/shadow:1:root:$6$YwwVMLULtamj9HkA$abG.jwCmQWMr.W9rWibB6y6WGfuVKM/BDdtCoc6OhKnfgHRLvGfeXnA37BILKUIlKMIplJyRd7W6X1jQIzCP.0::0:99999:7:::
4,#使用egrep匹配IP地址
[root@localhost ~]# egrep '([0-9](1,3)\.){3}[0-9]{1,3}'
5,#找出/etc/rc.d/init.d/functions文件中行首為某單詞(包含下劃線)后面跟一個(gè)小括號(hào)的行
[root@localhost ~]# cat /etc/rc.d/init.d/functions | grep -Eo "^[a-zA-Z]*_*.*\(\)"
6,#列出/etc命令下所有以.conf結(jié)尾的文件名,并將其名字轉(zhuǎn)換為大寫后保存至/tmp/etc.conf文件中
[root@localhost ~]# find /etc/ -name '*.conf' | grep -Eo "[^/]*(\.conf)$" |tr 'a-z' 'A-Z' >/tmp/etc.conf
7,#顯示/proc/meminfo文件中以大小s開(kāi)頭的行
[root@localhost ~]# cat /proc/meminfo |grep "^[sS]"
8,#顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行。
[root@localhost ~]# cat /etc/passwd |grep -v "/bin/bash$"
9,#找出“netstat -tan”,命令的結(jié)果中以“LISTEN"后跟任意多個(gè)空白字符結(jié)尾的行。
[root@localhost ~]# netstat -tan |grep "LISTEN[[:space:]].*"
10,#顯示CentOS 7上所有系統(tǒng)用戶的用戶名和UID。
[root@localhost ~]# cat /etc/passwd|cut -d ":" -f1,3|grep -v "root"|grep -v "[0-9]\{4,\}"
11,#取出文件/ete/inittab文件中,以#開(kāi)頭,且后面跟一個(gè)空格的行。
[root@localhost ~]# grep "^#[[:space:]]" /etc/inittab
12,#使用egrep取出/etc/rc.d/init.d/functions中其基名。
[root@localhost ~]# echo /etc/rc.d/init.d/functions |grep -o "\b[[:alnum:]]+/*$"
13,#取出grep選項(xiàng)-R。
[root@localhost ~]# grep --help|grep "\-R"
柚子快報(bào)激活碼778899分享:第六章 正則表達(dá)式
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。