bash正則表達式


星號*:

匹配它前面的字符串或正則表達式任意次(包括0次)。
比如:1122*
可能匹配的字符串有:112112211222221123131231 ......

句號.:

匹配除換行符之外的任意一個字符。
比如:"112.",將匹配112+至少一個字符
可能匹配的字符串有:11211122、112abc、1123131231 ......,但不匹配112

插入符號^:

匹配一行的開始,但有時依賴於上下文環境,可能表示否定正則表達式中一個字符串的意思。
比如:“^abc”只匹配行首為abc的字符串

 美元符$:

在一個正則表達式的末尾,匹配一行的結尾。
比如:"123$",將只能匹配到行尾為123的字符行,"^$"匹配匹配一個空行。

方括號[]:

匹配方括號內指定的字母集中的一個字符。
比如:"[abc]",將匹配字符a、b、c中的任意一個字符;而"[^abc]",將匹配除abc之外的所有字符。

反斜線符號\:

轉義一個特殊的字符,使這個字符得到字面意義的解釋。
比如:"\$",將表示它的原意"$""\\",表示"\"。

轉義尖括號\<\>:

用於標記單詞邊界。尖括號必須是轉義的,否則它們只是字符的字面含義。
比如:"\<the\>"匹配"the",但不匹配"them""there"

問號?:

匹配0個或1個前面的字符,用於匹配單個字符。
比如:"ab?c",將匹配"ac""abc"

加號+:

匹配一個或多個前面的字符,它和星號*很相似,單它不匹配0個字符的情況。
比如:"ab+c"將匹配"abc""abbc""abbb...c"等。

轉義波形括號\{\}:

指示匹配前面正則表達式的次數。波形括號必須是轉義的,否則只有字符的字面含義。
比如:"[0-9]\{5\}"將匹配5位數字。

圓括號():

包含一組正則表達式。與"|"或expr操作符一起使用。

豎線|:

正則表達式的""操作符匹配一組可選的字符。

比如:"a(b|c)d"將匹配"abd""acd"

 正則表達式比較操作符

[weblogic@etpmalldev6 logs]$ digit=132
[weblogic@etpmalldev6 logs]$ [[ $digit =~ [0-9] ]]
[weblogic@etpmalldev6 logs]$ echo $?
0

[weblogic@etpmalldev6 logs]$ digit="sfsfs"
[weblogic@etpmalldev6 logs]$ [[ $digit =~ [0-9] ]]
[weblogic@etpmalldev6 logs]$ echo $?
1

 實例:

測試數據:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ cat list.txt 
1122
112
11222
2211
22111
1122222112
3131231112112
 
abdde
abede
bbcdefss
bbdde
the people's replublic of China
fafslk;kfak
fdoutjjlsjpwkfks
fasfsaFSAFSFSAF
FSAFSFAFFS
abdabeccde

 

查找包含字符串"112"且其后至少有一個字符的行:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "112." list.txt
1122
11222
1122222112
3131231112112

 

查找字符"d"和"e"之間有一個任意字符的行:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "d.e" list.txt 
abdde
bbdde

查找在字符"2"后有兩個任意字符的行:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "2.." list.txt 
11222
2211
22111
1122222112
3131231112112

 

查找/etc/passwd文件中root賬號的信息,不使用插入符號^匹配:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

查找/etc/passwd文件中root賬號的信息,使用插入符號^匹配:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash

查看有空行有多少行:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "^$" list.txt | wc -l
1

查看所有匹配112*的行:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "112*" list.txt 
1122
112
11222
2211
22111
1122222112
3131231112112

查看所有以數字"3"開頭,"2"結尾的行:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "\<3.*2\>" list.txt --color
3131231112112

 查看文件中含有至少11個連續小寫字母的行:

[weblogic@etp-mall-dev7][/tpdata/shell_script]$ grep "[a-z]\{8\}" list.txt 
bbcdefss
the people's replublic of China
fdoutjjlsjpwkfks
abdabeccde

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM