1. 程式人生 > >[Shell]正則表達式與通配符

[Shell]正則表達式與通配符

strong 一位 內容 完全匹配 個數 基礎 txt 取消 就是

正則表達式與通配符:

1. 正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配。grep、awk、sed等命令可以支持正則表達式。

2. 通配符用來匹配符合條件的文件名,通配符是完全匹配。ls、find、cp這些命令不支持正則表達式,所以只能使用shell自己的通配符來進行匹配。

基礎正則表達式:

*   前一個字符匹配0次或任意多次

.   匹配除了換行符外任意一個字符

^   匹配行首。^abc 即 匹配以abc開頭的行

$   匹配行尾。abc$ 即 匹配以abc結尾的行

[]   匹配中括號中指定的任意一個字符,只匹配一個字符。[aeiou]匹配任意一個元音字母,[0-9][a-z]匹配小寫字母和一位數字構成的兩位字符

[^]  匹配除中括號內的字符以外的任意一個字符

\    轉義符。用於將特殊符號的含義取消

\{n\} 匹配其前面的字符恰好出現n次。[0-9]\{2\} 匹4位數字

\{n,\} 匹配其前面的字符出現不小於n次。

\{n,m\} 匹配其前面的字符至少出現n次,最多出現m次。[a-z]\{6,8\} 匹配6到8位的小寫字母

註意:

* 在通配符中表示任意字符,在正則表達式中表示前一個字符匹配0次或任意多次。

grep "a*" exp.txt # 匹配所有內容,包括換行符(就是因為可以匹配0次)

grep "aa*" exp.txt # 匹配至少含有一個a的行

grep "aaa*" exp.txt # 匹配至少包含兩個連續a的字符串

grep "a..e" exp.txt # 匹配在a和e之間有兩個字符的詞

grep "s.*e" exp.txt # 匹配在a和e之間有任意字符的詞

grep ".*" exp.txt # 匹配所有內容

grep "^M" exp.txt # 匹配以M開頭的行

grep "n$" exp.txt # 匹配以n結尾的行

grep "^$" exp.txt -n # 匹配所有空白行,-n可以顯示行號

grep "^[a-z]" exp.txt # 匹配小寫字母開頭的行

grep "a[bc]e" exp.txt # 匹配abe 或 ace

grep "^[^a-z]" exp.txt # 匹配不以小寫字母開頭的行

grep "[^a-zA-Z]" exp.txt # 匹配除了字母之外的其它字符的行

grep "\.$" exp.txt # 匹配以.結尾的行

grep "a\{2\}" exp.txt # 匹配a連續出現兩次的行

grep "[0-9]\{2,\}" exp.txt # 匹配連續出現兩個數字的行

grep "ab\{1,3\}" exp.txt # 匹配a後有1-3個b的行

[Shell]正則表達式與通配符