前言
在使用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
的使用过程中,掌握通配符往往可以事半功倍。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论