1. shell编程之正则表达式与通配符

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配。

1.1 通配符

通配符 含义
* 匹配任意内容
? 匹配任意一个内容
[] 匹配中括号中的一个字符
 # 创建2个文件 wangls 和 wanyls
 $ touch wangls
 $ touch wanyls
 # 创建文件夹
 $ mkdir testshell
 # 将创建的2个文件移动到文件夹中
 $ mv wan?ls ./testshell  # ? 代表任意一个内容
 $ cd testshell
 $ ls wan?ls   # ? 代表任意一个内容
 wangls wanyls
 $ ls wan???   # ? 代表任意一个内容 三个?代表3个字符
 wangls wanyls
 $ ls wan*   # * 代表任意内容
 wangls wanyls
 $ ls wan[gy]ls  # 匹配[]中出现的一个字符,此处匹配 g 或者 y字符,两个符合任选一
 wangls wanyls

1.2 正则表达式

正则表达式和通配符是有差距的, 通配符是用来匹配文件名的,正则表达式是用来匹配文件的
正则表达式是包含匹配,通配符是完全匹配,通配符有 * ? []

# grep 正则表达式是包含匹配,是匹配文件内容的
$ grep "http-client" config.log
2020-12-16 13:28:22.031 INFO [main :c.a.n.c.u.ParamUtil] [settings] [http-client] connect timeout:1000
2020-12-16 14:00:45.649 INFO [main :c.a.n.c.u.ParamUtil] [settings] [http-client] connect timeout:1000

1.3 基础正则表达式

元字符 作用
* 前一个字符匹配0次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配首行。例如:^hello会匹配以hello开头的行
$ 匹配行尾。例如:hello$会匹配以hello结尾的行
[] 匹配中括号中指定的任意一个字符,之匹配一个字符,[0-9]匹配任意一位数字,[a-z][0-9]匹配小写字母和一位数字构成的两位字符
[^] 匹配除中括号的字符以外的任意一个字符。例如[^0-9]匹配任意一位非数字字符
\ 转义字符,用于取消元字符的具体含义
\ 表示其 前面的字符恰好出现n次,例如[0-9]\{4\}匹配4位数字 [1][0-9]\{10\}匹配手机号
\ 表示前面的字符出现不小于n次,例如[0-9]\{4,\}表示4位及以上的数字
\ 表示前面的字符至少出现n次,最多出现m次,例如[a-z]\{6,8\}匹配6到8位的小写字母
a* # 匹配所有的内容,包含空白行, 因为* 表示前面的字符出现0次或者多次,a*表示a可以出现huoch
a** # 匹配至少包含有一个a的字符串
aaa* # 匹配至少包含两个连续a的字符串
aaaaa* # 匹配至少包含四个连续a的字符串

[] # 匹配中括号中指定的任意一个字符,只匹配一个字符
"s[ao]id" # 匹配s和i字母中  要不是a,要不是o
"[0-9]" # 匹配任意一个数字
"^[0-9]" # 匹配以任意一个数字开头的字符串

[^] # 匹配除中括号的字符以为的任意一个字符
"^[^a-z]" # 匹配不是小写字母开头的行
"^[^a-zA-Z]" # 匹配不是字母开头的行

"\{n,\}" # 表示前面的字符出现不小于n次
"^[0-9]\{3,\}[a-z]" # 至少以3位数字开头的行且后面有一位小写字母
posted on 2021-03-22 22:47  明蓝皓月  阅读(50)  评论(0)    收藏  举报