一、通配符与正则表达式的区别
通配符用来匹配文件名,正则表达式用来匹配文本。
![](https://img-blog.csdnimg.cn/833bb98ca47147bc829c2330d27ba077.png)
二、通配符
Shell命令中通常用通配符做文件名字或则目录名的模糊查找。
2.1 *
表示匹配任意长度的字符
eg:
在终端中输入命令 ls *.txt 则会显示当前路径下所有以.txt结尾的文件
2.2 ?
表示匹配单个任意字符
eg:
在终端中输入命令 ls ?.c 则会显示当前路径下所有文件名只有 1 个字符的.c文件
输入命令 ls ???.c 则会显示当前路径下所有文件名只有 3 个字符的.c文件
2.3 [a-z] [0-9]
[a-z]表示匹配a-z中任意一个字符
这样的通配涉及到操作系统本地语序 本地语序默认是 aAbBcCdD...zZ
在本地语序未被清除之前[a-z]通配的字符中包含大写字母字符
可以通过在终端输入命令 export LC_ALL=C 来清除本地语序
通过在终端输入命令 unset LC_ALL 来恢复本地语序
清空本地语序后[a-z]表示通配a-z中的任意一个字符,其中不包括大写字母字符
[0-9]表示匹配0-9中任意一个数字字符
2.4 .*
匹配以点号开头的任意字符
2.5 ~
匹配当前用户的家目录
eg:
在终端中输入命令 cd ~ 表示回到家目录
三、正则表达式
正则表达式用于匹配某个字符串(文本内容)
下面列举常用的正则表达式相关的符号:
3.1 *
匹配 * 前面的任意字符
3.2 ?
表示非贪婪匹配或非获取匹配
正则表达式默认是对文本中所有内容进行匹配,
获得所有匹配成功的内容,也叫做贪婪匹配。
在所需要匹配的内容中加了 ? 后会从文本中匹配所需要内容,
一旦发现内容相匹配就不再往下匹配了,也就叫做非贪婪匹配。
(前提:匹配内容必须完全在文本中出现)
eg:
源字符串为: text_1(aa)str_1(bb)test_2(aa)str_2(bb)test_3(aa)str_3(bb)test_4
正则表达式1 为: (aa).*(bb)
--->结果为: (aa)str_1(bb)test_2(aa)str_2(bb)test_3(aa)str_3(bb)
正则表达式2 为:(aa).*?(bb)
--->结果为:(aa)str_1(bb)
3.3 [a-z]
包含大小写的匹配
也就是匹配aAbBcC...zZ
3.4 .*
匹配任意长度的字符
3.5 .
匹配任意单一字符
3.6 \
表示转义
eg:
在shell命令 expr 中使用运算符的时候,部分运算符需要用转义字符转义
sum=`expr 100 \* 200` #表示将100乘以200的值赋值给变量sum
#此时 * 需要用转义字符 \ 来转义
3.7 ^
行首
eg:
在终端中输入命令 grep "^string" ./ 表示查找以string开头的行
3.8 $
行尾
eg:
在终端中输入命令 grep "string$" ./ 表示查找以string结尾的行