1. 程式人生 > >文件通配符與正則表達式

文件通配符與正則表達式

系統/運維 Linux

文件通配符與正則表達式

文件通配符:
*********************************************************
??? * 匹配零個或多個字符
??? ? 匹配任何單個字符
??? [0-9] 匹配數字範圍
??? [a-z] 字母? (註: [a-z] 匹配的字母並非全是小寫字母)
??? [A-Z] 字母? (註: [A-Z] 匹配的字母並非全是大寫字母)
??? [wang] 匹配列表中的任何的一個字符
??? [^wang] 匹配列表中的所有字符以外的字符

??? 預定義的字符類(man 7 glob)
??? [:digit:]:任意數字,相當於0-9
??? [:lower:]:任意小寫字母

??? [:upper:]: 任意大寫字母
??? [:alpha:]: 任意大小寫字母
??? [:alnum:]:任意數字或字母
??? [:blank:]:水平空白字符
??? [:space:]:水平或垂直空白字符
??? [:punct:]:標點符號
=========================================================
補充說明:文件通配符通常用於查找文件,而正則表達式通常用於查找文件內容
=========================================================
示例如下:

??? 1、顯示示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件或目錄

????? # ls -d /var/l*[[:digit:]]*[[:lower:]]
??? 2、顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的文件或目錄
????? # ls -d /etc/[[:digit:]]*[^[:digit:]]
??? 3、顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字符的文件或目錄
????? # ls -d /etc/[^[:alpha:]][[:alpha:]]*
??? 4、顯示/etc/目錄下所有以rc開頭,並後面是0-6之間的數字,其它為任意字符的文件或目錄
????? # ls -d /etc/rc[0-6]*
??? 5、顯示/etc目錄下,所有以.d結尾的文件或目錄
????? # ls -d /etc/*.d
??? 6、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的文件或目錄
????? # ls -d /etc/[mnrp]*.conf
??? 7、只顯示/root下的隱藏文件和目錄
????? # ls -d /root/.[^.]*
??? 8、只顯示/etc下的非隱藏目錄
????? # ls -d /etc/*/

========================================================================================
知識延伸: ls -d選項的使用說明:
查看某目錄的長列表信息時要是用使用-d選項:# ls -dl dir1 ,如果不加-d選項會顯示目錄下的文件列表信息
ls -dl /dir/*? 使用-d選項顯示當前目錄下的文件或目錄,但不會遞歸顯示字母目錄
ls -dl /dir/*/ 顯示dir目錄下的非隱藏文件夾要使用*/
========================================================================================

正則表達式:
基本正則表達式元字符
字符匹配:
*********************************************************
??? . 匹配任意單個字符 (通配符使用?作為單個字符匹配)
??? [] 匹配指定範圍內的任意單個字符
??? [^] 匹配指定範圍外的任意單個字符
??? [:alnum:] 字母和數字
??? [:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
??? [:lower:] 小寫字母 [:upper:] 大寫字母
??? [:blank:] 空白字符(空格和制表符)
??? [:space:] 水平和垂直的空白字符(比[:blank:]包含的範圍廣)
??? [:digit:] 十進制數字
??? [:punct:] 標點符號
*********************************************************
匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數
*********************************************************
??? * 匹配前面的字符任意次,包括0次
??? 貪婪模式:盡可能長的匹配
??? .* 任意長度的任意字符
??? \? 匹配其前面的字符0或1次
??? \+ 匹配其前面的字符至少1次
??? \{n\} 匹配前面的字符n次
??? \{m,n\} 匹配前面的字符至少m次,至多n次
??? \{,n\} 匹配前面的字符至多n次
??? \{n,\} 匹配前面的字符至少n次
*********************************************************
位置錨定:定位出現的位置
*********************************************************
??? ^ 行首錨定,用於模式的最左側
??? $ 行尾錨定,用於模式的最右側
??? ^PATTERN$ 用於模式匹配整行
??? ^$ 空行
??? ^[[:space:]]*$ 空白行
??? \< 或 \b 詞首錨定,用於單詞模式的左側
??? \> 或 \b 詞尾錨定;用於單詞模式的右側
??? \<PATTERN\> 匹配整個單詞
*********************************************************
??? 擴展正則表達式與標準正則表達式的區別在省略了轉義字符\,如下:
??? ?: 0或1次 (標準正則:\?)
??? +:1次或多次(標準正則:\+)
??? {m}:匹配m次(標準正則:\{m\})
??? {m,n}:至少m,至多n次(標準正則:\{m,n\})
??? 分組:()(標準正則:\(\))

文件通配符與正則表達式