linux通配符和正则表达式的区别总结
目录
通配符和正则表达式的区别
Linux中的通配符
通配符和正则表达式的区别
在看鸟哥的Linux私房菜的时候看到十二章一直强调通配符和正则表达式的区别,在我的理解中,两者貌似是一样的都是用来匹配的。Google之网上给出的答案是:
在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的
而通配符多用在文件名上,比如查找find,ls,cp,等等
下表是鸟哥给的Linux下的通配符
符號 | 內容 |
* | 萬用字元,代表 0 個或多個字元(或數字) |
? | 萬用字元,代表『一定有』一個字母 |
# | 註解,這個最常被使用在 script 當中,視為說明! |
/ | 跳脫符號,將『特殊字元或萬用字元』還原成一般字元 |
| | 分隔兩個管線命令的界定; |
; | 連續性命令的界定(注意!與管線命令並不相同) |
~ | 使用者的家目錄 |
$ | 亦即是變數之前需要加的變數取代值 |
& | 將指令變成背景下工作 |
! | 邏輯運算意義上的『非』 not 的意思! |
/ | 路徑分隔的符號 |
>, >> | 輸出導向,分別是『取代』與『累加』 |
' | 單引號,不具有變數置換的功能 |
" | 具有變數置換的功能! |
` ` | 兩個『 ` 』中間為可以先執行的指令! |
( ) | 在中間為子 shell 的起始與結束 |
[ ] | 在中間為字元的組合 |
{ } | 在中間為命令區塊的組合! |
下表是鸟哥总结的正则表达式的字符
RE 字符 | 意義與範例 |
^word | 待搜尋的字串(word)在行首! |
範例:grep -n '^#' regular_express.txt 搜尋行首為 # 開始的那一行! |
|
word$ | 待搜尋的字串(word)在行尾! |
範例:grep -n '!$' regular_express.txt 將行尾為 ! 的那一行列印出來! |
|
. | 代表『任意一個』字符,一定是一個任意字符! |
範例:grep -n 'e.e' regular_express.txt 搜尋的字串可以是 (eve) (eae) (eee) (e e), 但不能僅有 (ee) !亦即 e 與 e 中間『一定』僅有一個字元,而空白字元也是字元! |
|
/ | 跳脫字符,將特殊符號的特殊意義去除! |
範例:grep -n /' regular_express.txt 搜尋含有單引號 ' 的那一行! |
|
* | 重複零個或多個的前一個 RE 字符 |
範例:grep -n 'ess*' regular_express.txt 找出含有 (es) (ess) (esss) 等等的字串,注意,因為 * 可以是 0 個,所以 es 也是符合帶搜尋字串。另外,因為 * 為重複『前一個 RE 字符』的符號, 因此,在 * 之前必須要緊接著一個 RE 字符喔!例如任意字元則為 『.*』 ! |
|
/{n,m/} |
連續 n 到 m 個的『前一個 RE 字符』 若為 /{n/} 則是連續 n 個的前一個 RE 字符, 若是 /{n,/} 則是連續 n 個以上的前一個 RE 字符! |
範例:grep -n 'go/{2,3/}g' regular_express.txt 在 g 與 g 之間有 2 個到 3 個的 o 存在的字串,亦即 (goog)(gooog) |
|
[] | 字元集合的 RE 特殊字符的符號 |
[list] 範例:grep -n 'g[ld]' regular_express.txt 搜尋含有 (gl) 或 (gd) 的那一行~ 需要特別留意的是,在 [] 當中『謹代表一個待搜尋的字元』, 例如: a[afl]y 代表搜尋的字串可以是 aay, afy, aly 亦即 [afl] 代表 a 或 f 或 l 的意思! [ch1-ch2] [^] |
基本上解释就是通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中。而正则表达式是操作字符串,以行尾单位来匹配字符串使用的。
还有一点需要注意的是:*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的。比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任意长度的前面的字符。
Linux中的通配符
通配符是由shell处理的, 它只会出现在 命令的“参数”里。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符 实际上就是一种shell实现的路径扩展功能。在 通配符被处理后, shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。
SHELL中的通配符
帮助手册:# man 7 glob
* |
匹配任意长度的任意字符,可以是0个 |
? |
匹配任意单个字符,必须是1个 |
[ ] |
匹配指定字符范围内的任意单个字符 |
[a-z,A-Z,0-9] |
匹配所有数字字母,可以不加逗号 |
[a-z] |
表示a-z,A-Y,表示a,A,b,B.....a。不包含Z |
[A-Z] |
表示A,b,B.....z,Z。不包含a |
[a-Z] |
表示所有大小写字母 |
[:upper:] |
所有大写字母 |
[:lower:] |
所有小写字母 |
[:alpha:] |
所有字母,大小写 |
[:digit:] |
所有数字 |
[:alnum:] |
所有数字+字母 |
[:blank:] |
水平空白字符 |
[:space:] |
水平或垂直空白字符 |
[:punct:] |
标点符号 |
[:print:] |
可打印字符 |
[:cntrl:] |
控制(非打印)字符 |
[:graph:] |
图形字符 |
[:xdigit:] |
十六进制字符 |
[^] |
匹配指定字符范围外的任意单个字符 |
[^0-9] |
相当于[^[:digit:]] |
[^a-z] |
表示Z + 其他 |
[^A-Z] |
表示a + 其他 |
示例:
1、显示/etc目录下,所有以.d结尾的文件或目录
# ls -d /etc/*.d
/etc/bash_completion.d /etc/modprobe.d /etc/rc6.d
/etc/binfmt.d /etc/modules-load.d /etc/rc.d
/etc/chkconfig.d /etc/my.cnf.d /etc/request-key.d
/etc/cron.d /etc/pam.d /etc/rsyslog.d
/etc/depmod.d /etc/popt.d /etc/rwtab.d
/etc/dracut.conf.d /etc/prelink.conf.d /etc/setuptool.d
/etc/exports.d /etc/profile.d /etc/statetab.d
/etc/gdbinit.d /etc/rc0.d /etc/sudoers.d
/etc/grub.d /etc/rc1.d /etc/sysctl.d
/etc/init.d /etc/rc2.d /etc/tmpfiles.d
/etc/krb5.conf.d /etc/rc3.d /etc/xinetd.d
/etc/ld.so.conf.d /etc/rc4.d /etc/yum.repos.d
/etc/logrotate.d /etc/rc5.d
2、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
#ls -d /etc/[mnrp]*.conf
/etc/man_db.conf /etc/nfsmount.conf /etc/resolv.conf
/etc/mke2fs.conf /etc/nsswitch.conf /etc/rsyncd.conf
/etc/nfs.conf /etc/request-key.conf /etc/rsyslog.conf
参考文章:
https://blog.csdn.net/huiguixian/article/details/6284834
https://www.cnblogs.com/ysuwangqiang/p/11364173.html
linux通配符和正则表达式的区别总结相关推荐
- 软链接与硬链接的区别;描述通配符与正则表达式的区别
软硬连接区别: 删除硬链接 对源文件和软连接没有任何影响 删除软链接 对源文件和硬链接没有任何的影响 删除文件的源文件 对硬链接没有影响 但会导致软连接失效(红底白字闪烁) 同时删除硬链接与源文件 文 ...
- 【转】linux通配符和正则表达式
Table of Contents 通配符 Shell常见通配符: shell Meta字符(元字符) 转义字符 正则表达式 通配符和正则表达式比较 grep 1. grep简介 2. grep正则表 ...
- linux 通配符与正则表达式
linux通配符和三剑客(grep.awk.sed)正则表达式是不一样的 通配符一般用户命令行bash环境,而linux正则表达式用于awk.grep.sed 转载于:https://www.cnbl ...
- linux通配符和正则表达式
1. 通配符 通配符是shell在做PathnameExpansion时用到的.说白了一般只用于文件名匹配,它是由shell解析的,比如find,ls,cp,mv等. 1.1 Shell常见通配符: ...
- linux 通配符 正则表达式 区别,linux 正则表达式和通配符
linux 正则表达式和通配符 通配符用于查找文件 包含三种: * ? [] * 代表任意个任意字符 ? 代表任意一个字符 [] 代表中括号中的一个字符 正则表达式(正则是包含匹配,只要包含就可以匹 ...
- linux通配符怎么使用方法,linux 通配符使用小结
首先,通配符是shell提供的一种路劲扩展功能.在linux的shell中,要区分通配符和正则表达式的区别.简单理解,通配符是用来匹配文件名的.而正则表达式是用来匹 首先,通配符是shell提供的一种 ...
- 10.linux通配符
一,linux通配符及正则表达式 通配符:用于文件名匹配,是由shell解析,如find,ls,cp,mv. *:匹配任意长度的任意字符 ?匹配任意单个字符 [ ]匹配指定范围内任意单个字符 [ ^] ...
- linux通配符 ,Linux通配符知识入门详解
注意:通配符和正则表达式是不一样的,因此代表的意义也是有较大区别的. 通配符一般用户命令行bash环境,而Linux正则表达式用于grep,sed,awk场景. * -- 通配符,代表任意(0到多个) ...
- php、linux、javascript 正则表达式
PHP 正则表达式中包含三种元素分别为:量词.元字符.修饰符 量词 语法 描述 匹配任何至少包含一个前导字符串 匹配任何包含零个或多个前导字符串 ? 匹配任何包含零个或一个前导字符串 . 匹配任意字符 ...
最新文章
- Flink从Kafka 0.8中读取多个Topic时的问题
- InsightFace tensorRT
- 【C/C++语言入门篇】-- 文件操作
- 智能水位检测系统proteus_单片机水塔水箱水位系统Proteus仿真程序
- linux挂载VMFS硬盘,ESX4.1挂载NFS共享存储(VMkernel)
- 欧几里得与扩展欧几里得总结
- WebSocket请求过程分析及实现Web聊天室
- 2gt;MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgcalloc.obj) 中定义...
- 一篇关于微信防撤回(文本、图片、语音、视频、名片等...)的Python学习教程
- 基于stm32的银行排队叫号机设计
- 在VScode上使用latex编辑pdf
- 美国卡尔顿学院计算机专业怎么样,美国顶尖学院卡尔顿学院
- Spring Value注解的使用
- redis mysql 雪崩_Redis缓存雪崩问题
- 在家无聊就重装个系统吧 三分钟教你重装安装系统
- Mac Android 合作,干货:这个秘籍让笔记本同时拥有(mac/win/Android)系统
- 【虚拟试衣论文笔记】C-VTON: Context-Driven Image-Based Virtual Try-On Network
- 新浪程序员因加班错失年会77万元年会大奖?网友呼吁:应该补发
- 黑群晖6.x安装教程
- Matlab数字图像处理 实验1、数字图像的傅里叶变换
热门文章
- 皮一皮:充实的一天...
- 盘点几个开源的高仿项目,B站最像~
- 一次搞定:分布式缓存 Redis 集群搭建!
- 再见微服务,从100多个问题儿童到一个超级明星
- ps随机排列_漂亮!自然材料:人工可控微米级胶体粒子“堆积木”——粒子随心所欲的组装排列!...
- php操作mysql数据库的扩展有哪些_8.PHP操作MySQL数据库(Mysqli扩展)
- VS2017项目打包为exe和setup
- ATSS EfficientDet
- python 交互图形 bokeh学习总结
- error C2061: 语法错误: 标识符“std”