Shell中的正则表达式
1、正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配的。ls、find、cp这些命令不支持正则表达式,所以只能使用Shell自己的通配符来进行匹配了。
2、正则表达式规则
元字节 | 作用 |
* | 前一个字符匹配0次或者n次 |
. | 匹配除了换行符外任意一个字符 |
^ | 匹配行首,例如:^hello会匹配以hello开头的行 |
$ | 匹配行尾,例如:hello$会匹配以hello结尾的行 |
[] | 匹配中括号中指定的任意一个字符,只匹配一个字符。 例如:{aoeiu}匹配任意一个元音字符, [0-9]匹配任意一位数字 [a-z][0-9]匹配小写字和一位数构成的俩位字符 |
[^] | 匹配除了中括号的字符以外的任意一个字符,例如:[^0-9]匹配 任意一个为数字字符 |
\ | 转义符,用于取消将特殊符号含义取消 |
\{n\} | 表示其前面的字符出现不小于n次, 例如:[0-9]{2,} 表示匹配俩位数及其以上的数字 |
\{n,m\} | 表示其前面的字符至少出现n次,最多m次, 例如:[a-z]{6,8}匹配6到8为的小写字母 |
3、练习
测试的文本
3.1 匹配所有内容,包括空白行
命令:grep "a*" 文件名
效果图:
3.2 匹配行至少包含有一个a的行
命令:grep "aa*" 文件名
效果图:
3.3 匹配行至少有俩个连续的a
命令:grep "aaa*" 文件名
效果图:
3.4 匹配在s与d字符中间有俩个字符的单词的行
命令:grep "s..d" 文件名
效果图:
3.6 匹配所有内容
命令:grep ".*" 文件名
效果图:
3.7 匹配以大写M开头的行
命令:grep "^M" 文件名
效果图:
3.8 匹配以!结尾的行
命令:grep "\!$" 文件名
效果图:
3.9 匹配所有的空行
为了方便观察 添加参数-n打印一下行号。
命令:grep "^$" 文件名
效果图:
3.10 匹配s和id中间的字母要么是a要么是o的行
命令:grep "s[ao]id" 文件名
效果图:
3.11 匹配任意一个数字的行
命令:grep "[0-9]" 文件名
效果图:
3.12 匹配用小写字母开头的行
命令:grep "^[a-z]" 文件名
效果图:
3.13 匹配没用小写字母开头的行
命令:grep "^[^a-z]" 文件名
效果图:
3.14 匹配不以字母开头的行
命令:grep "^[^a-zA-Z]" 文件名
效果图:
3.15 匹配使用 . 结束的行
命令:grep "\.$" 文件名
效果图:
3.16 匹配a字母连续出现3次或大于3次的行
命令:grep "a\{3\}" 文件名
效果图:
3.14 匹配在字母sa和字母i直接有至少一个a,最多三个3
命令:grep "sa\{1,3\}i" 文件名
效果图: