Shell之Glob和RE的区别
Shell之Glob和RE的区别
😄 Written by Zak Zhu
学习python风格, 优雅规范书写shell代码
参考
- 疯狂的程序员11/linux通配符和正则表达式(https://blog.csdn.net/swjtuwyp/article/details/51817472)
- 马哥linux视频
- RHCE培训(RH033-Unit6)
Glob
glob - globbing pathnames
通配符是Shell在写Pathname Expansion使用的, 比如find, ls, cp, mv, cat, yum等命令
Glob | Comment | Examples |
---|---|---|
* | 匹配任意(>=0)个字符 | e.g. a*b, 表示a与b之间可以有任意个字符, 可以匹配到ab, aab, a98db等 |
? | 匹配1个任意字符 | e.g. a?b, 表示a与b之间只能有一个字符, 可以匹配到axb, ayb, azb等 |
[list] | 匹配list中的任意一个字符 | e.g.1 a[123]b, 可以匹配到a1b, a2b, a3b e.g.2 a[A-C]b, 可以匹配到aAb, aBb, aCb |
[^list] | 匹配不在list中一个任意字符 | e.g. a[^1-3]b, 可以匹配到acb, a4b, axb |
{str1,str2...} | 匹配大括号内所有str | e.g. a{abc,xyz,123}b, 列出aabcb, axyzb, a123b |
RE
规则表达式就是用事先定义好的一些特定字符组合模板对文本内容过滤的语言
Linux中支持RE的命令有vim,grep, awk, sed等
默认贪婪匹配
Linux命令中常用的RE
RE | Comment |
---|---|
. | 匹配任意一个字符 |
[list] | 匹配list中的任意一个字符 |
[^list] | 匹配不在list中一个任意字符 |
[[:space:]] | 匹配空格字符 |
次数匹配 | 用于指定匹配其前面的字符的次数 |
* | 表示任意次, 等价于 |
? | 表示0次或1次, 等价于 |
+ | 表示>=1次, 等价于 |
{m,n} | 表示>=m次, <=n次 |
{m,} | 表示>=m次 |
位置锚定 | 用于指定字符出现的位置 |
^char | 锚定以char行首的内容 |
char$ | 锚定以char行尾的内容 |
曾经一度把glob和re两个概念混淆!
😄 Oh Yeah!