一般而言,globing和 regular expression 区别在于前者匹配文件的名称,后者用于匹配文件中的内容。
globbing中常用的元字符有:
*:任意长度的任意字符
?: 任意单个字符
[]:指定范围内的字符
[^]J:指定范围外的字符
对于regular expression(简写为regexp)而言可分为basic regexp和extended regexp
basic regexp中元字符有
. :匹配任意单个字符
[]:匹配指定范围内的字符
[^]:匹配指定范围外的字符
字符集合:[:digit:],[:lower:],[:upper:],[:punct:],[:alpha:],[:alnum:],[:space:]等
#真正使用还需添加[]来选定范围。
匹配次数:
* :匹配其前面的字符任意次 包括0次 例如:a*b 表示 a出现任意次后有1个b
.* :任意长度的任意字符
#正则表达式工作在贪婪模式下,尽可能多的匹配
\?:匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次,之多n次
\{1,\}:匹配至少1次 \{0,3\}:匹配至少0次,至多3次
位置锚定
^ :锚定行首,此字符串后面的任意内容必须出现在行首。
$:锚定行尾,此字符前面的任意内容必须出现在行尾。
^$:空白行
\<或者\b:其后面的任意字符必须作为单词首部出现 锚定词首
\>或者\b:其前面的任意字符必须作为单词尾部出现 锚定词尾
\<root\> = \broot\b
分组:
\(\): \(ab\)* ab作为一个整体 后向引用
\2:
grep:使用基本正则表达式定义的模式来过滤文本的命令
-i:忽略大小写 -v:invert -o:only --color
-E:使用拓展的正则表达式
-A #:after 匹配并显示之后的#行
-B #:before
-C #:context (上下文)
拓展正则表达式:(不标注表示与基本含义相同)
字符匹配:
.
[ ]
[^]
次数匹配:
*:
?:
+:匹配其前面的字符至少1次
{ }
位置锚定:
^
$
\<
\>
分组:
():分组
\1,\2,\3
| :or 例如: grep 'C|cat' file 和 grep '(C|c)at' file
{n}:n为数字,表示前面的表达式重复n次