文章目录
1.正则表达式
1.1 正则表达式与统配符
通配符(*、?、[ ])用来匹配符合条件的文件名,通配符是完全匹配(完全一模一样才能匹配)。ls、cp、find这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配(包含了就可以匹配)。grep、awk、sed等命令可以支持正则表达式。
如果是ls,就只会列出这一行值有size的内容。
1.2 基础正则表达式
元字符 | 作用 |
---|---|
* | 前一个字符匹配0次或任意多次 |
. | 匹配除了换行符外任意一个词 |
^ | 匹配行首。如:^hello会匹配以hello开头的行 |
$ | 匹配行尾。如:hello$会匹配以hello结尾的行 |
[ ] | 匹配括号中指定的任意一个字符,只匹配一个字符。如[0-9]匹配任意一位数字 |
[^] | 匹配除括号中的字符意外的字符。如:[ ^ 0-9] 匹配任意一位非数字字符 |
\ | 转义符。用于取消特殊符号的含义 |
\{n\} | 表示其前面的字符恰巧出现n次,例如:[0-9]\{4\}匹配四位字符,这四位字符是0-9中的任意一个,1234、2345 |
\{n,\} | 表示其前面的字符出现不小于n次,例如:[0-9]\{4,\}匹配大于等于四位字符,1234、12345 |
\{n,m\} | 表示其前面的字符出现不小于n次,不多余m次。例如:[0-9]\{4,6\}匹配四到六位字符,12345、1234、123456 |
我们通过以下的例子来理解这些:
1.2.1 *
==*前一个字符匹配0次或任意多次 ==:
grep "a*" test1 # 匹配a重复0次到任意多次
grep "aa*" test1 # 匹配最少包含有一个a的行
*前的a可以是零个,但是他之前号有一个a,所以是至少包含1到任意个a。
grep "aaa*" test1 # 匹配最少包含两个a的行
1.2.2 .
匹配除了换行符外任意一个字符:
grep "w..l" test1 # 匹配任意在w和l之间有2个字符的行
grep