前言
在使用linux
时,往往会使用Linux
built-in
命令find
、ls
等对当前的文件或者目录进行查找、显示、检索等,当不知道全名,只使用其中某个或某几个字符操作时,就可以使用通配符来代替和补全余下对象的字符、字符串。下文介绍了笔者工作时用到的关于通配符的相关知识和使用方法。
一、通配符、及其分类
- 关于什么通配符,下网页很好的介绍了这部分内容,不做赘述
简介 | path |
---|---|
百度词条 | link |
同行笔者 | Linux 通配符 与 正则表达式 的区别与详解:link |
- 通配符知识部分总结
符号 | 释义 | 说明 |
---|---|---|
* | 表示零个或多个字符 | 下划线’_‘、小数点’.‘、空格’ 也是字符,下同 |
? | 一个字符 | |
[] | 中括号,匹配中括号里面字符中的任意一个 | ([abc] 表示可以匹配a、b和c,[abc] 也是使用逗号在中括号中,[abc] 等同于[a,b,c] ) |
^ | 同! , 只能在中括号[] 中使用,表示不匹配中括号中的任意字符 | ([!abc] 表示不匹配a、b、c) |
{} | 匹配大括号中字符组合中的任何一个 | ({ab,c,de} 表示匹配ab、c、de中的任意一项){} 属于通配符么? |
字符:包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。
来自字符百度词条 1
- 另外还有,指定匹配数字、字母(大写,小写)、数字或者字母、点或者下划线,等:
符号 | 释义 | 说明 |
---|---|---|
[:digit:] | 匹配数字 | 仅匹配一个 |
[:lower:] | 任意小写字母 | 仅匹配一个 |
[:upper:] | 任意大写字母 | 仅匹配一个 |
[:alpha:] | 任意字母 | 仅匹配一个 |
[:alnum:] | 任意一个字母或数字 | 仅匹配一个 |
[:space:] | 一个空格 | 仅匹配一个 |
[:punct:] | 表示一个符号 | 可以是键盘上的各种符号,包括但不限于@、#、_、\、(、)、^、&、~、.、? 等符号,但是不包括空格、数字、字母 |
注释:1. 以上匹配都是匹配一个;2.使用使用需要用双中括号,用这样的形式 [[:digit:]] [[:lower:]] [[:upper:]] [[:alpha:]] [[:alnum:]] [[:space:]] [[:punct:]]
二、通配符示例、案例
使用的linux的shebang是sh或者bash,不能使用tcsh或者csh
使用的文件有:
# 查看文件
sh-4.2$ ls *
1 1#2 '1(2' '1*2' 12 '1?2' '1\2' 1_2 1~2 A A.TXT A_ '1 2' '1&2' '1)2' 1.2 '1=2' 1@2 '1^2' 1ls 2 A. A.txt
示例:
sh-4.2$ ls
1 1#2 '1(2' '1*2' 12 '1?2' '1\2' 1_2 1~2 A A.TXT A_ '1 2' '1&2' '1)2' 1.2 '1=2' 1@2 '1^2' 1ls 2 A. A.txt
sh-4.2$ ls *
1 1#2 '1(2' '1*2' 12 '1?2' '1\2' 1_2 1~2 A A.TXT A_ '1 2' '1&2' '1)2' 1.2 '1=2' 1@2 '1^2' 1ls 2 A. A.txt
## [[:digit:]][[:punct:]]? 表示数字符号字符
sh-4.2$ ls [[:digit:]][[:punct:]]?
1#2 '1&2' '1(2' '1)2' '1*2' 1.2 '1=2' '1?2' 1@2 '1\2' '1^2' 1_2 1~2
### ??
sh-4.2$ ls ??
12 A. A_
sh-4.2$ ls 1
1
sh-4.2$ ls 1*
1 '1 2' 1#2 '1&2' '1(2' '1)2' '1*2' 1.2 12 '1=2' '1?2' 1@2 '1\2' '1^2' 1_2 1ls 1~2
sh-4.2$ ls 1?
12
### []内中字符的某一个
sh-4.2$ ls [12]
1 2
sh-4.2$ ls [1A]
1 A
### [!1A]不为1和A的一个字符
sh-4.2$ ls [!1A]
2
### {}字符组合,使用逗号隔开
sh-4.2$ ls {[1A],2}
1 2 A
sh-4.2$ ls {[1A],A_}
1 A A_
sh-4.2$ ls {[[:digit:]],A_}
1 2 A_
sh-4.2$ ls {[[:digit:]][[:digit:]],A_}
12 A_
### [[:alnum:]]和[a-z0-9A-Z]同义
sh-4.2$ ls [[:alnum:]]
1 2 A
sh-4.2$ ls [[:upper:]]
A
###
sh-4.2$ ls A.[[:alpha:]][[:alpha:]][[:alpha:]]
A.TXT A.txt
### . 点是punct中的一种,但是不包括空格
sh-4.2$ ls A[[:punct:]][[:alpha:]][[:alpha:]][[:alpha:]]
A.TXT A.txt
### ?问号可以表示一个字符
sh-4.2$ ls ????
'1 2'
sh-4.2$ ls [[:digit:]][[:punct:]]?
1#2 '1&2' '1(2' '1)2' '1*2' 1.2 '1=2' '1?2' 1@2 '1\2' '1^2' 1_2 1~2
### 空格是使用[[:space:]]来匹配
sh-4.2$ ls ?[[:space:]][[:space:]]?
'1 2'
注释:使用[[:digit:]] [[:lower:]] [[:upper:]] [[:alpha:]] [[:alnum:]] [[:space:]] [[:punct:]]时,如果同一个匹配超过一次,可以重复使用。
例如:
[[:digit:]][[:digit:]]
是合法的,但是[[:digit:]]+
是不可以的
总结
该节是通配符的种类和使用用例的总结,在Linux
的使用过程中,掌握通配符往往可以事半功倍。
念念不忘,必有回响
END
字符百度词条(https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6/4768913?fr=ge_ala) ↩︎