bash Shell本身不支持正则表达式,使用正则表达式的是Shell命令和工具,如grep、sed、awk等;
但是,bash Shell可以使用正则表达式中的一些元字符实现通配(Globbing)功能,通配是把一个包含通配符的非具体文件名扩展存储在计算机
服务器或者网络上的一批具有文件名的过程。
最常用的通配符包括正则表达式元字符: ? * [ ] { } ^等。这些元字符在通配中的意义与正则表达式中的意义不完全一致;
"*": 不表示其前面字符的重复, 而是表示任意位的任意字符;
"?": 表示一个任意字符
"^": 不代表行首, 而是代表取反;
"[]": 特殊情况,该符好与正则表达式中相同;
“{ }”: 表示一组表达式的集合;
示例:
[a-h]*.awk : 表示以a~h范围内以字母开头并以.awk结尾的文件;
[a-h]*.[^awk]* : 表示a~h范围内以字母开头不以awk结尾的文件;注意:"*"必不可少,否则句号仅匹配到一个字符;
{[a-h]*.[^awk]* , o?.pem}: 表示满足[a-h]*.[^awk]* 或者 o?.pem 的所有文件;
说明:通配的结果有计算机搜索大量的文件或者目录进行匹配而输出, 通配对处理能力和内存资源有很高的要求。
黑客输入包含通配符的文件名故意让服务器重复和连续不断地进行通配可能引起的拒绝服务攻击;因此,大型服务器经常
通过限制服务器执行通配功能的次数、限制一个具体用户每次输入的通配符或者如果通配符太普通,则拒绝执行通配等方式来提高服务器的安全性;
grep用法: