背景:在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开头的文件名

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

  1. Linux文件名匹配和输出重定向--2019-4-24

    1.文件名匹配 例:rm *.bak;   删除结尾是.bak的文件 rm *4*.bak; 删除名称中有“4”的.bak文件 ls *.????; 查找结尾是“.”后有四个字母的文件 2.管道 先进 ...

  2. Linux 文件名匹配

    As the shell reads each line, it "handles" any special characters. This includes variable ...

  3. linux文件名匹配

    *   匹配文件名中的任何字符串,包括空字符串. ? 匹配文件名中的任何单个字符. [...]   匹配[ ]中所包含的任何字符. [!...]   匹配[ ]中非感叹号!之后的字符. 如: s*   ...

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

    linux中的通配符.元字符.转义符 linux中的通配符元字符转义符 shell命令的构成 通配符 元字符meta 转义符 example reference shell命令的构成 每条linux命 ...

  5. linux 正则表达式和通配符

    linux 正则表达式和通配符 通配符用于查找文件 包含三种:  * ? [] * 代表任意个任意字符 ? 代表任意一个字符 [] 代表中括号中的一个字符 正则表达式(正则是包含匹配,只要包含就可以匹 ...

  6. [转帖]Linux教程(13)- Linux中的通配符和正则表达式

    Linux教程(13)- Linux中的通配符和正则表达式 2018-08-22 06:16:44 钱婷婷 阅读数 39更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文 ...

  7. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

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

    说明:来自老阮的<为什么文件名要小写>的文章,其实我觉得应该说是<Linux文件名为什么要小写>会更合适些. 一.可移植性 Linux 系统是大小写敏感的,而 Windows ...

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

    转自:http://www.linuxsa.cn/when-linux-file-name-topsy-turvy-deleted-or-renamed.html linux文件名乱码时删除或改名的方 ...

随机推荐

  1. LAYOUT 注意点

    1:CLK时钟GND全包,可以适当调整布局使包地完整. 2:WIFI天线下层均净空GND 3:过孔尽量不打在焊盘上或距离焊盘太近容易漏锡

  2. Linux下的信号详解

    文章链接:https://blog.csdn.net/qq_38646470/article/details/80257512

  3. 详细聊聊k8s deployment的滚动更新(一)

    一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 二.环境准备 组件 版本 OS Ubuntu 18.04.1 LTS docker 18.06.0-ce 三.准备镜像 首先准备 ...

  4. petapoco 对存储过程的扩展 干货

    好久没发表文章了.心血来潮,简单的介绍下这次工作中的问题. 项目中运用了Petapoco,可是petapoco对存储过程的支持不够好.或者说对于某些特殊场景,petapoco的sql支持度有限. 比如 ...

  5. PAT甲题题解-1036. Boys vs Girls (25)-找最大最小,大水题

    题意:给出n个人的姓名.性别.ID.分数,让你找出其中哪个妹纸分数最高.哪个汉子分数最低.以及他们的差如果没有妹纸或者汉子,则对应输出Absent,差用NA代替. 就是for一遍找最大最小值,水题 # ...

  6. 2-Eighteenth Scrum Meeting-20151218

    任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作  写完学习进度记录的数据库操作 唐彬 编写与服务器交互的代码 和服务器老师交流讨论区后台接口 史烨轩 获取视频url  尝试使用 ...

  7. 20135202闫佳歆--week6 课本第三章学习笔记

    第三章 进程管理 一.进程 1.进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程 执行线程, ...

  8. 作业三:LINUX内核的启动过程

    作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...

  9. 铁大快捷记账Alpha版使用说明书

    一. 引言 (1) 编写目的 (2) 参考资料 (3) 术语和缩写词 二. 网站概述 (1) 网站用途 (2) 网站运行 三. 网站使用过程 (1)网站登录 (2) 功能说明 一.引言 (1)编写目的 ...

  10. ns3的输入输出奥秘(二) 命令行参数

    命令行参数 (1) UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9); echoClient.SetAttribute (&q ...