通配符用于搜索、匹配文件名
| 字符 | 说明 | 示例 |
| -------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| * | 匹配任意字符数。 您可以在字符串中使用星号 (*****)。 | “wh*”将找到 what、white 和 why,但找不到 awhile 或 watch。 |
| ? | 在特定位置中匹配单个字母。 | “b?ll ”可以找到 ball、bell 和 bill。 |
| [ ] | 匹配方括号中的字符。 | “b[ae]ll”将找到 ball 和 bell,但找不到 bill。 |
| ! | 在方括号中排除字符。 | “b[!ae]ll”将找到 bill 和 bull,但找不到 ball 或 bell。“Like “[!a]*””将找到不以字母 a 开头的所有项目。 |
| - | 匹配一个范围内的字符。 记住以升序指定字符(A 到 Z,而不是 Z 到 A)。 | “b[a-c]d”将找到 bad、bbd 和 bcd。 |
| # | 匹配任意单个数字字符。 | “1#3”将找到 103、113 和 123。 |
| ^ | 同感叹号、在方括号中排除字符 | b[^ae]ll
,找不到ball,找不到bell,能找到bcll |
* 匹配任意(0或多个)字符串,包括空字符串
? 匹配任意1个字符,且只有一个字符
[abcd] 匹配方括号里的abcd任意一个字符,abcd可以是其他不连续的字符如[aqwd]
[a-z] 匹配方括号里a到z之间的任意一个字符,也可以是连续的数字[1-9]
[!abcd] 不匹配方括号里的任意字符,也可以写为连续的字符,如[!a-z],也就是不匹配a到z任意的一个字符,且!符可以用^替代,写成[^abcd]
创建测试数据
[yuchao-linux-242 root /tmp]#mkdir /test ;cd /test
[yuchao-linux-242 root /test]#
[yuchao-linux-242 root /test]#touch yuchao.txt yuc.txt cc.txt yuchao01.log yuyu.log cc.sh
找出所有txt结尾的文件
查看以sh结尾的文件
查看以yu开头、txt结尾的文件
查看以yu开头、log结尾的文件
查看所有以yu开头的文件
找出以c开头的文件
[yuchao-linux-242 root /test]#ls ?.sh
ls: cannot access ?.sh: No such file or directory
这个报错了,为什么?
如何查找特定字符数量的文件?
比如找出sh脚本文件
你只能多写几个问号
再比如找出所有txt
语法
[a,b,c]
[a-z]
[A-Z]
[a-zA-Z]
[1,3,4,7]
[0-9]
[a-zA-Z0-9]
实践
创建测试数据,如
[yuchao-linux-242 root /test]#touch {a..g}.log
[yuchao-linux-242 root /test]#ls
a.log b.log cc.sh cc.txt c.log c.sh d.log e.log f.log g.log yuchao01.log yuchao.txt yuc.txt yuyu.log
[yuchao-linux-242 root /test]#
找出文件名是a-z之间任意一个字符的txt
为什么出错?
[yuchao-linux-242 root /test]#ls [a-z].txt
ls: cannot access [a-z].txt: No such file or directory
找出a-z之间任意一个字符的log
找出a-c之间任意一个字符的log
创建测试数据
touch yu{1..5}.log
touch yc{1..5}.log
找出以yu1 yu2 yu3 相关的log文件
找出以y开头相关的log
找出所有yu、yc相关的log文件
语法
[!a,b,c,d]
同上
[^abcd]
练习
[yuchao-linux-242 root /test]#ls
a.log cc.sh c.log d.log f.log yc1.log yc3.log yc5.log yu2.log yu4.log yuchao01.log yuc.txt
b.log cc.txt c.sh e.log g.log yc2.log yc4.log yu1.log yu3.log yu5.log yuchao.txt yuyu.log
找出除了以abcd开头的所有log文件
找出除了abcd开头的单个字母的log文件
排除所有以yu开头的文件
排除所有以yu开头的sh文件
搜索/etc下所有包含hosts相关字符的文件
搜索/etc下的以ifcfg开头的文件(网卡配置文件)
只查找以数字结尾的网卡配置文件
找到系统中的第一块到第四块磁盘,注意磁盘的语法命名
找找sdb硬盘有几个分区,2种写法
注意*是和上面不同的
测试数据源准备
[yuchao-linux01 root ~/test_shell]$touch {a..h}.log
[yuchao-linux01 root ~/test_shell]$touch {1..10}.txt
找出a到e的log文件
找出除了3到5的txt文件
找出除了2,5,8,9的txt文件
使用! 和^ 两个写法
找出除了a,e,f的log文件
比起通配符来说,linux的特殊符号更加杂乱无章,但是一个专业的linux运维
孰能生巧,这些都不是问题
| 符号 | 作用 | | ---- | ------------------------------------------ | | ~ | 当前登录用户的家目录 | | - | 上一次工作路径 | | . | 当前工作路径,或表示隐藏文件 .yuchao.linux | | .. | 上一级目录 |
'' 单引号、所见即所得
"" 双引号、可以解析变量及引用命令
`` 反引号、可以解析命令
无引号,一般我们都省略了双引号去写linux命令,但是会有歧义,比如空格,建议写引号
> stdout覆盖重定向
>> stdout追加重定向
< stdin重定向
2> stderr重定向
2>> stderr追加重定向
command1 && command2 # command1成功后执行command2
command1 || command2 # command1失败后执行command2
command1 ; command2 # 无论command1成功还是失败、后执行command2
\ # 转义特殊字符,还原字符原本含义
$() # 执行小括号里的命令
`` # 反引号,和$()作用一样
| # 管道符
{} # 生成序列
例如使用date练习
单引号是无法识别date命令的
反引号中的linux命令是可以执行的,且反引号中只能写可执行的命令
当输出双引号内的内容是,如果内容里有linux命令、或者变量、特殊转义符等
会优先解析变量、命令、转义字符,然后得到最终的内容
没有引号、很难确定字符串的边界,很容易出现各种故障
之前讲过重定向符号、以及数据流的结合用,这里就不重复了。
如生活中的管道,能够传输物质
Linux管道符 | 用于传输数据,对linux命令的处理结果再次处理,直到得到最终结果
前面成功、继续后面
只有前面命令失败、才执行后面命令
创建文件,以及系统时间命名
生成序列符号
拷贝文件的便捷写法
变量分隔符
${var_name}