shell 通配符和正则表达式理解和区别

一、正则表达式:

元字符是用来阐释字符表达式意义的字符,简言之,就是用来描述字符的字符。

正则表达式RE(Regular Expression)是由一串字符和元字符构成的字符串。

正则表达式的主要功能是文本查询和字符串操作,它可以匹配文本的一个字符或字符集合。实际上正则表达式完成了数据的过滤,将不满足正则表达式定义的数据拒绝掉,剩下与正则表达式匹配的数据。

                        基本的正则表达式元字符集合及其意义

符号 意义
* 0个或多个在*字符之前的那个普通字符和前面字符可以看成一个字符
. 匹配任意字符
^ 匹配行首,或后面字符的非
$ 匹配行尾
[] 匹配字符集合
\ 转义符,屏蔽一个元字符的特殊意义
\<\> 精确匹配符号
\{n\} 匹配前面字符出现n次  P.43
\{n,\} 匹配前面字符至少出现n次
\{n,m\} 匹配前面字符出现n~m次

1.“*”符号(和前面字符可以看成一个字符)

zha*ng  :“*”前面的普通字符是a,就表示匹配a字符0次或多次,如:zhng、zhang、zhaaaang

(根据测试可以不包括前面的字符,即匹配0次)

2.匹配空行

匹配行首的^和匹配行尾的$组合起来“^$”可以用来匹配空行,如果需要匹配只包含一个字符的行,可以用“^.$”

3."[]"符号

匹配字符集合,支持穷举方法列出字符集合的所有元素,也支持使用“-”符号表示字符集合范围。

[12345] 等价于 [1-5]

我们知道“^”符号表示匹配行首,但是,“^”符号放到“[]”符号中就不再表示匹配行首了,而是表示取反符号。

[^b-d]  :表示不再b~d范围内的字符

[A-Za-z] [A-Za-z]*  :匹配任意英文单词

二、正则表达式的扩展:

                扩展的正则表达式元字符及其意义

符号 意义
匹配0个或一个在其之前的那个普通字符
+ 匹配一个或多个在其之前的那个普通字符
() 表示一个字符集合或用在expr中
| 表示“或”,匹配一组可选的字符

1.“?”符号

(根据测试可以不包括前面的字符,即匹配0次)

2."()"符号和“|”符号

"()"符号和“|”符号通常结合使用,表示一组可选字符的集合。

re(a|b|c)d  等价于  re[abc]d

"|"符号也可以表示多个正则表达式的“或”关系。

grep -E “zha?ng|zhi”  文件

三、通配符:

bash shell本身不支持正则表达式,使用正则表达式的是shell命令和工具,如grep,sed,awk。

注意:bash shell只可以使用正则表达式中的一些元字符实现通配(Globbing)功能。

通配是把一个包含通配符的非具体文件名扩展一批具体文件名的过程。

总结:可以看出通配主要应用匹配文件名上,而正则主要应用于字符串上

* - 通配符,代表任意字符(0到多个)
? - 通配符,代表一个字符

^ 取反

\ - 跳转符号,将特殊字符或通配符还原成一般符号
| - 分隔两个管线命令的界定
; - 连续性命令的界定
~ - 用户的根目录
$ - 变量前需要加的变量值
! - 逻辑运算中的"非"(not)
‘ - 单引号,不具有变量置换功能
" - 双引号,具有变量置换功能

时间: 2024-10-29 19:05:40

shell 通配符和正则表达式理解和区别的相关文章

* 和 ?在 shell 命令行中与在正则表达式中的区别

Linux 正则表达式 你有没有想过,在 shell 命令行中的 *,?和正则表达式中的*,?是否一样? 自打好多年前接触 DOS,就知道了* 和?这两个通配符(Wildcard),象 dir *.* 这样的命令也不知道敲了多少遍. 后来,开始用 Windows 3.1 这样的图形界面操作系统,命令行就就得越来越少了. 再后来,开始学习正则表达式,又开始接触 * 和 ? 这样的东西.在正则中它们被称为元字符(Meta Character). 再再后来,开始使用 Linux,于是又开始使用命令行,

通配符和正则表达式的区别

而通配符多用在文件名上,比如查找find,ls,cp,等等 下表是鸟哥给的Linux下的通配符 符號 內容 * 萬用字元,代表 0 個或多個字元(或數字) ? 萬用字元,代表『一定有』一個字母 # 註解,這個最常被使用在 script 當中,視為說明! / 跳脫符號,將『特殊字元或萬用字元』還原成一般字元 | 分隔兩個管線命令的界定: ; 連續性命令的界定(注意!與管線命令並不相同) ~ 使用者的家目錄 $ 亦即是變數之前需要加的變數取代值 & 將指令變成背景下工作 ! 邏輯運算意義上的『非』

软链接与硬链接的区别;描述通配符与正则表达式的区别

软硬连接区别:删除硬链接 对源文件和软连接没有任何影响删除软链接 对源文件和硬链接没有任何的影响删除文件的源文件 对硬链接没有影响 但会导致软连接失效(红底白字闪烁)同时删除硬链接与源文件 文件才会真正被删除通配与正则区别:基本上解释就是通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中.而正则表达式是操作字符串,以行尾单位来匹配字符串使用的.还有一点需要注意的是:在通配符和正则表达式中有其不一样的地方,在通配符中可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者

通配符和正则表达式

在看鸟哥的Linux私房菜的时候看到十二章一直强调通配符和正则表达式的区别,在我的理解中,两者貌似是一样的都是用来匹配的.Google之网上给出的答案是: 在文本过滤工具里,都是用正则表达式,比如像awk,sed,等,是针对文件的内容的 而通配符多用在文件名上,比如查找find,ls,cp,等等 下表是鸟哥给的Linux下的通配符 符號 內容 * 萬用字元,代表 0 個或多個字元(或數字) ? 萬用字元,代表『一定有』一個字母 # 註解,這個最常被使用在 script 當中,視為說明! / 跳脫

Linux Shell 通配符、转义字符、元字符、特殊字符

一.linux shell通配符(wildcard) 通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令中也没有发现有这些通配符介绍), 它只会出现在命令的"参数"里(它不用在命令名称里,也不用在操作符上).当shell在"参数"中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行替换(路径扩展):否则就将该通配符作为一个普通字符传递给"命令",然后再由命令进

linux shell通配符、元字符、转义符

Linux Shell 通配符.元字符.转义符使用实例介绍 说到shell通配符(wildcard),大家在使用时候会经常用到.下面是一个实例: 1 1 2 3 4 [[email protected] ~/shell]$ ls a.txt  b.txt  c.old #2 1 2 3 4 [[email protected] ~/shell]$ ls *.txt a.txt  b.txt #3 1 2 [[email protected] ~/shell]$ ls d*.txt ls: 无法访

[Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询

通配符和正则表达式查询 wildcard查询和prefix查询类似,也是一个基于词条的低级别查询.但是它能够让你指定一个模式(Pattern),而不是一个前缀(Prefix).它使用标准的shell通配符:?用来匹配任意字符,*用来匹配零个或者多个字符. 以下查询能够匹配包含W1F 7HW和W2F 8HW的文档: GET /my_index/address/_search { "query": { "wildcard": { "postcode"

Shell函数和正则表达式

1. shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式: func() {   #指定函数名 command    #函数体 } Shell 函数很简单,函数名后跟双括号,再跟双大括号.通过函数名直接调用,不加小括号. #显示文本颜色 [[email protected] ~]# vim test.sh #!/bin/bash fun (){ for i in {32..39} do

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4