重心应该放在通配符的使用上
正则表达式
正则表达式是用于 文本匹配和替换 的强大工具
介绍两个交互式的网站来学习正则表达式
regexlearn 支持中文
regexone
还有一个在线测试的网址
regex101
基本规则
符号 | 作用 | 示例 |
---|---|---|
. | 匹配任何字符除了换行 | a.b -> axb/a,b |
[abc] | 匹配字符集里面的任何一个内容 | b[aei]d -> bad/bed/bid |
[^abc] | 否定字符集,匹配除了字符集之外的字符 | b[abc]d -> bad b[^abc]d ↛ bad |
[a-z] | 匹配a-z 的所有字符也能任意指定区间 | [a-z] -> x/a/d/r/t |
[0-9] | 同样支持数字匹配 | [0-9] -> 1/4/7 |
* | 匹配前一个字符0次或多次 | be* -> b/be/beeee |
+ | 匹配前一个字符1次或多次 | be+ -> be/beeee |
? | 匹配前一个字符0次或1次 | colou?r - > colour/color |
{n} | 表示前一个字符确切的次数 | be{2}t -> beet |
{n,} | 表示前一个字符至少出现n 次 | be{2,} -> bee/beee/beeeeee |
{m,n} | 表示前一个字符出现的次数在m-n 之间 | be{1,3} -> be/bee/beee |
^ | 表示匹配行首 | - |
$ | 匹配行尾 | - |
\w | 用于匹配字母、数字和下划线 | - |
\W | 用于匹配除字母数字和下划线之外的内容 | - |
\d | 用于匹配数字相当于[0-9] | - |
\D | 用于匹配除了数字以外的内容相当于[^0-9] | - |
\s | 匹配空白字符 | - |
\S | 匹配非空白字符 | - |
.* | 贪婪匹配尽可能多的匹配 | - |
.*?q | 懒惰匹配遇到你所给的内容便停止这里是q | - |
(?=pm) | 正向先行断言,只匹配后面有 pm 的内容 | - |
(?!pm) | 负向先行断言,处了后面有pm的内容 | - |
(?<=$) | 正向后行断言,只匹配以$ 开头的内容 | - |
(?<!q) | 负向后行断言,只匹配不以q | - |
使用()
可以完成分组匹配 ()
中为想捕获的内容(?:)
可以仅分组不捕获
|
可以支持或的逻辑
这样可以捕捉以.c
和.txt
结尾的文件
建议直接跟着交互式教程玩一遍,然后自己在在线测试网址看结果,无需看我的举例
举例
-
^
匹配行首
-
$
匹配行尾
\
为转义字符否则.
的含义为匹配任何一个字符
-
\w
-
\W
-
\d
-
\D
-
\s
-\S
-
(?=)
匹配以.txt结尾的文件名
-
(?!)
匹配除了.txt的文件名
这样其实不能达到效果
-
(?<=)
匹配所有以点开头的单词,但是不包括.
-
(?<!)
\b
表示单词的边界 -
.*
尽可能长的进行匹配
-
.*?
遇到即停止
linux通配符
这个部分与正则的语法有一定的差异
也没有那么复杂
符号 | 作用 |
---|---|
* | 匹配任意数量的任意字符 |
? | 匹配单个任意字符 |
[a-z] | 括号内任意一个字符,这与正则规则相同就不多说了 |
[^0-9] | 也支持取反不过使用! 也可以 |
我们使用rm
删除命令来举例
删除所有以d
开头的目录
删除所有以数字结尾的目录和文件
注意3是个普通文件他的颜色与目录不同,他也被删除了
rm -rf *
删库跑路2333 注意这会删除你当前工作目录的所有内容,而且linux没有类似于回收站的机制基本无法找回,请慎重
这些基本上够日常使用
不过其实还支持更强大的通配符
更强大的通配符
查看是否开启
shopt extglob
显示on即正常开启了,如果没有采用下面命令开启
shopt -s extglob
pattern都是通配符
注意如果你的rm后面的删除的文件名没有
/
那么会针对所有目录和文件操作 如果你不想误操作删除了你的目录的话你就不要加上-r
-
?(pattern)
匹配0次或1次
同时删除dir和dirx
-
*(pattern)
匹配0次或多次
删除所有以数字结尾的内容,如果你不采用这个
你就只能删除单个数字结尾的内容 -
+(pattern)
匹配1次或多次
删除所有以dir开头以数字结尾的目录和文件
注意如果这里是你用*([0-9])
你会导致dir23x
和dirx
也被删除,因为*([0-9])
可以是0次,随后前面的*
可以把最后的x
也匹配上
-
!(pattern)
不匹配pattern
删除所有不以数字为结尾的目录
注意这个/
非常关键如果你没有/
那么你的对象不再只是目录文件也算了
你会删除所有不以数字结尾的文件和目录 -
@(pat1|pat2)
同时匹配pat1
和pat2
的内容
删除所有纯数字和纯字母的文件和目录
你可以主要到我使用了一些嵌套扩展通配符这也是可以的