1:正則表達式與通配符
正則表達式用來在文件中匹配符合條件的字符串,正則是包含匹配。grep, awk, sed等命令可以支持正則表達式。
通配符用來匹配符合條件的文件名,通配符是完全匹配。ls, find, cp這些命令不支持正則表達式,所以只能使用shell自己的通配符來進行匹配了。
2:基礎正則表達式
元字符 | 作用 |
---|---|
* | 前一個字符串匹配0次或者任意多次 |
. | 匹配除了換行符外任意一個字符。 |
^ |
匹配行首。例如:^hello會匹配以hello開頭的行 |
$ | 匹配行尾。例如:hello&會匹配以hello結尾的行 |
[] | 匹配中括號中指定的任意一個字符,只匹配一個字符。例如:[aeiou]匹配任意一個元音字母,[0,9]匹配任意一位數字,[a-z][0-9]匹配小寫字母和一位數字構成的兩位字符。 |
[^] | 匹配除中括號的字符以外的任意一個字符。例如:[^0-9]匹配任意一位非數字字符,[^a-z]表示任意一位非小寫字母。 |
\ | 轉義符。用於取消講特殊符號的含義取消 |
\{n\} | 表示其前面的字符恰好出現n次。例如:[0-9]\{4\}匹配4位數字,[1][3-8][0-9]\{9\}匹配手機號碼。 |
\{n,\} | 表示其前面的字符出現不小於n次。例如:[0-9]\{2,\}表示兩位及以上的數字 |
\{n,m\} | 表示其前面的字符至少出現n次,最多出現m次。例如:[a-z]\{6,8\}匹配6到8位的小寫字母。 |
創建一個文件來使用以下這些命令:
grep "b*" test.txt(匹配所有內容,包括空白行)
grep "bb*" test.txt(匹配至少包含有一個b的行)
grep "e..s" test.txt(會匹配在e和s兩個字母之間一定有兩個字符的單詞)
grep "^A" test.txt(匹配以A開頭的行)
grep "k$" test.txt(匹配以k結尾的行)
grep -n "^$" test.txt (匹配空白行)
grep "e[my]e" test.txt(匹配e和e子母鐘,要不是m,要不是y)
grep "[0-9]" test.txt(匹配任意一個數字)
grep "^[A-Z]" test.txt(匹配以大寫字母開頭的行)
grep "^[0-9]" test.txt
grep "^[^a-zA-Z]" test.txt(匹配不用字母開頭的行)
grep "\.$" test.txt(匹配使用”.“結尾的行)
grep "[0-9]\{2\}" test.txt (匹配[0-9]連續出現2次的字符串)
grep "^[0-9]\{3,\}" test.txt(匹配最少出現3個數字開頭的行)
grep "[0-9]\{1,4\}" test.txt(匹配最少1個數字最多4個數字的行)
grep "2[0-9]\{2,4\}" test.txt(表示2後面跟着至少3個數字)
可以使用正則表達式來給變量賦值