linux文件名匹配——通配符使用

背景:在linux使用过程中,经常需要查找文件,对命令中的通配符pattern和正则表达式的区分不是很清楚。有必要好好研究一下。

1 扫盲

1.1 通配符和正则表达式

当在使用命令行时,有很多时间都用来查找你所需要的文件,如ls find等。 S h e l l提供了一套完整的字符串模式匹配规则,或者称之为元字符,当s h e l l遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名,我理解这可以称为通配符。

通配符与正则表达式是有区别的,简单来说:通配符是用来通配的,正则表达式是用来匹配字符串的;

在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的。

而通配符多用在文件名上,比如查找find,ls,cp,等等。

其次,shell对通配符与正则表达式的处理也有不同,“ ”内一般为通配符(是shell本身提取处理),‘ ’内一般为正则表达式(shell会将其中的数据传递给其它命令处理)。

2 通配符详细介绍

测试数据

 touch a a6.log abc.log ac.txt b c c5.txt x.log A

“*”

代表任意多个字符

例:查询以".log"结尾的文件

ll *.log

“?”

代表任意单个字符

例:只查询a、b、c

ll ?

“[]”

代表“[”和“]”之间的某一个字符,比如[0-9]可以代表0-9之间的任意一个数字,[a-zA-Z]可以代表a-z和A-Z之间的任意一个字母,字母区分大小写。

例:只查询字母文件

ll [a-zA-Z]

例:查询以“.log”结尾且“.log”前只有两个字符的文件且第二个字符是数字

ll ?[0-9].log

“^”

表示匹配结果取反的意思,注意这个通配符必须要在[]中使用

例:查询不是以“.txt”结尾的文件

ll *[^txt]*

“{}”

表示符合括号内包含的多个文件

例:查询‘.log’和“.txt”结尾的文件

ll {*.log,*.txt}

注意: “.”这个符合比较特殊,如果匹配的条件加上了该符合那么说明查询结果文件就包含带“.”的文件

例如前面的“^”的例子,如果我这样查询“ll *.[^txt]*”,那么结果就不一样了

删除操作

例如:删除a、b、c和以.txt结尾的文件

rm -f {[abc],*.txt}

当然既然可以查询当然也可以使用通配符匹配的方式进行移动文件,如果需要在存在很多文件的文件夹中移动某些类型的文件那么使用通配符匹配的效率就显而易见了;当时通配符的使用技巧不单单只有这些,有空的可以多去研究。

3 实例

*   匹配文件名中的任何字符串,包括空字符串。

? 匹配文件名中的任何单个字符。

[...]   匹配[ ]中所包含的任何字符。

[!...]   匹配[ ]中非感叹号!之后的字符。和^的效果一样

如:

5*           5开头的所有字符串

*5           5结尾的所有字符串

*5?        以5为倒数第二个字符的字符串

[0-9]    所有以数字的字符

[1,2]         1或者2

[!0-9]        不是数字的字符

ls /etc/[!a-n]*.conf 列出/etc/目录中不是以字母a到n开头的,并且以.conf结尾的文件

ls /etc/[a-n]*.conf 列出/etc/目录中以字母a到n开头的,并且以.conf结尾的文件

ls /bin/[ck]* 列出以 c或k开头的文件名

时间: 2024-10-04 23:14:03

linux文件名匹配——通配符使用的相关文章

Linux文件名匹配之通配符使用

Linux文件通配符:当在使用命令行时,有很多时间都用来查找你所需要的文件,如ls.find等. shell提供了一套完整的字符串模式匹配规则,或者称之为元字符,当shell遇到上述字符时,就会把它们当作特殊字符,而不是文件名中的普通字符,这样用户就可以用它们来匹配相应的文件名,我理解这可以称为通配符. 通配符 作用 * 匹配零个或多个字符 ? 匹配任何单个字符 ~ 当前用户家目录 ~mage 用户mage家目录 ~+ 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围 [a-z] 字

(004) Linux之shell通配符

十年运维系列之基础篇 - Linux 作者:曾林 联系:[email protected] 网站:www.jplatformx.com 版权:文章未经同意请勿转载 一.引言 我们经常要在shell下执行命令行程序,而这些命令行程序需要经常使用文件名,因此shell提供了一些特殊字符来帮助快速指定或者筛选一组文件名.这些特殊的字符就被称之为“通配符”.通配符(也被称为文件名替换)允许用户依据字符模式选择文件名.通配符可以与任一个使用文件名为参数的命令一起使用.并且通配符不但可以在命令行程序中起作用

linux中的通配符、元字符、转义符

linux中的通配符.元字符.转义符 linux中的通配符元字符转义符 shell命令的构成 通配符 元字符meta 转义符 example reference shell命令的构成 每条linux命令中的每一个character都是下面两种之中的一个: - literal:普通纯文本 - 保留字:通配符.元字符.转义字符 通配符 通配符是由shell处理的(不是由所涉及到命令语句处理的.事实上我们在shell各个命令中也没有发现有这些通配符介绍), 它仅仅会出如今命令的"參数"里(它

shell 正则表达式与文件名匹配

1) . : 匹配任意单ASCII 字符,可以为字母,或为数字.2) 举例: ..XC..匹配deXC1t.23XCdf等,.w..w..w.匹配rwxrw-rw-行首以^匹配字符串或字符序列1) ^ : 允许在一行的开始匹配字符或单词.2) 举例: ^.01 匹配0011cx4.c01sdf 等,^d 匹配drwxr-xr-x.drw-r--r--等 行尾以$匹配字符串或字符 1) $ : 在行尾匹配字符串或字符,$符号放在匹配单词后.2) 举例: trouble$ 匹配以单词trouble结

linux文件名乱码时删除或改名的方式(转载)

转自:http://www.linuxsa.cn/when-linux-file-name-topsy-turvy-deleted-or-renamed.html linux文件名乱码时删除或改名的方式 当......一堆......文件出现乱码时,你想用脚本把他们改名,结果又发现字符处理工具awk等都对这些玩意没有办法,无比蛋疼啊,怎么办泥,我有办法: 1.ls -i 查找到这些乱码文件的inode号,比如说22588202.find . -inum 2258820 -exec mv {} n

Linux文件名小写的好处(转)

说明:来自老阮的为什么文件名要小写的文章,其实我觉得应该说是Linux文件名为什么要小写会更合适些. 一.可移植性 Linux 系统是大小写敏感的,而 Windows 系统和 Mac 系统正好相反,大小写不敏感.一般来说,这不是大问题. 但是,如果两个文件名只有大小写不同,其他都相同,跨平台就会出问题. foobar Foobar FOOBAR fOObAr 上面四个文件名,Windows 系统会把它们都当作foobar.如果它们同时存在,你可能没办法打开后面三个文件. 另一方面,在 Mac 系

linux文件名通配符:* ? []

通配符命令简介: 匹配符合相关条件的符号,匹配文件名查找. 通配符类型: *:匹配任意长度的任意字符 ?:匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^]:匹配指定范围之外的任意单个字符 [:space:]:空白字符 [:punct:]:标点符号 [:lower:]:小写字母 [:upper:]:大写字母 [:alpha:]:大小写字母 [:digit:]:数字 [:alnum:]:数字和大小写字母 通配符命令实例练习: 1.创建a123,cd6,c78m,cl my,m.z,k 6

Linux Shell之通配符、转义字符、元字符

这里分别给大家讲解Linux Shell 通配符http://www.maiziedu.com/course/482/.转义字符.元字符. 一.linux shell通配符(wildcard) 通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令中也没有发现有这些通配符介绍), 它只会出现在命令的"参数"里(它不用在命令名称里,也不用在操作符上).当shell在"参数"中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻

Linux中的通配符和正则表达式

通配符: 文件名统配是bash的特性之一,通配符一般用于文件名的匹配. *   :任意长度的任意字符 ?   :匹配任意单字符 []  :匹配指定范围内的任意单字符 例:[abc], [a-z], [0-9], [0-9a-z] [^] :匹配指定范围以外的任意单字符 例:[^0-9a-z] 字符集合: [:space:] :所有空白字符 [:punct:] :所有标点符号 [:lower:] :所有小写字母 [:upper:] :所有大写字母 [:digit:] :所有数字 [:alnum:]