Shell之Glob和RE的区别

Shell之Glob和RE的区别

😄 Written by Zak Zhu

学习python风格, 优雅规范书写shell代码

参考

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

1

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!

posted @ 2019-10-01 15:02  ZakZhu  阅读(454)  评论(0编辑  收藏  举报