通配符和正则表达式

在看鸟哥的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]
範例:grep -n ‘[0-9]‘ regular_express.txt

尋含有任意數字的那一行!需特別留意,在字元集合 [] 中的減號 - 是有特殊意義的,他代表兩個字元之間的所有連續字元!但這個連續與否與
ASCII 編碼有關, 因此,您的編碼需要設定正確(在 bash 當中,需要確定 LANG 與 LANGUAGE 的變數是否正確!)
例如所有大寫字元則為 [A-Z]

[^]
範例:grep -n ‘oo[^t]‘ regular_express.txt

尋的字串可以是 (oog) (ood) 但不能是 (oot) ,那個 ^ 在 [] 內時,
代表的意義是『反向選擇』的意思~例如,我不要大寫字元,則為 [^A-Z] ~ 但是,需要特別注意的是,如果以 grep -n [^A-Z]
regular_express.txt 來搜尋, 卻發現該檔案內的所有行都被列出,為什麼?因為這個 [^A-Z] 是『非大寫字元』的意思,
因為每一行均有非大寫字元,例如第一行的 "Open Source" 就有 p,e,n,o.... 等等的小寫字元, 以及雙引號 (")
等字元,所以當然符合 [^A-Z] 的搜尋!

基本上解释就是通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中。而正则表达式是操作字符串,以行尾单位来匹配字符串使用的。

还有一点需要注意的是:*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的。比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任意长度的前面的字符。

转自:http://blog.csdn.net/huiguixian/article/details/6284834

时间: 2024-10-25 22:28:57

通配符和正则表达式的相关文章

MySQL必知必会读书笔记-2(去重,limit,结果的排序,通配符,正则表达式)

DISTINCT(去重)和LIMIT 检索不重复的数据 使用DISTINCT关键字,注意,这个关键字是针对所有列的 #查找所有不同的vend_idSELECT DISTINCT vend_id FROM products #查找所有不同的vend_id, prod_price SELECT DISTINCT vend_id, prod_price FROM products 结果行数的限制 使用LIMIT SELECT prod_name FROM products LIMIT 3, 4;#输出

linux通配符与正则表达式

通配符 *  任意字符,可重复多次 ? 任意字符,重复一次 [] 代表一个字符 举例: [a,b,c] 表示abc中任意一个 通配符的作用是用来匹配文件名的 正则表达式 正则表达式是在文件中匹配符合条件的字符串的 ls find cp是不支持正则表达式的 但是grep awk sed支持正则表达式 [[email protected] test]# touch aa [[email protected] test]# touch aab aabb [[email protected] test]

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

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

通配符和正则表达式-grep,egrep,fgrep

通配符和正则表达式-grep,egrep,fgrep 通配符和正则表达式,通配符用于文件名匹配,命令支持ls,cp,rm等;正则为通用匹配,命令支持grep,awk,sed,vi,find等.文本过滤工具grep,egrep,fgrep 通配符 *  匹配零个或多个任意字符 ?  匹配单个任意字符 [] 匹配指定范围内的一个字符,[]括号中的 字符间隔符 可以省略,如,\=:等等.举例[1:2=3,5\7] = [12357],也推荐使用这种省略写法作为标准 ^  取反,表示非.注意:非数字即包

*在通配符及正则表达式中的差别

*在通配符和正则表达式中有其不一样的地方,在通配符中*可以匹配任意的0个或多个字符,而在正则表达式中他是重复之前的一个或者多个字符,不能独立使用的.比如通配符可以用*来匹配任意字符,而正则表达式不行,他只匹配任意长度的前面的字符. 基本上解释就是通配符是系统命令使用(ls cp等),一般用来匹配文件名或者什么的用在系统命令中.而正则表达式是操作字符串,以行尾单位来匹配字符串使用的(sed gawk grep等).

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

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

12.25 -特殊符号,通配符与正则表达式

12.25 特殊符号,通配符与正则表达式 内容: 1. 特殊符号系列 2. 通配符 3. 正则表达式分类 4. 正则与通配符区别 第1章 特殊符号 1.1 无分类系列 $   1.命令行 取出变量内容                     echo $LANG 2.awk中  取某一列                        awk '{print $1}' xukai.txt 3.普通用户的命令提示符                    [[email protected] ~]$

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

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

【我的Linux,我做主!】通配符和正则表达式深层解析

目录:(一)了解通配符和正则的作用(二)通配符的使用(三)正则表达式的使用(四)扩展正则表达式的使用 (一)了解通配符和正则的作用(1.1)在我们日常的工作中,我们都会使用到通配符或者正则表达式.通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件.当查找文件夹时,可以使用它来代替一个或多个真正字符:当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符.正则表达式是计算机科学的一个概念,正则表达式通常被用来检索.替换那些符合某个模式的文本,正则表达式是对