linux常用通配符有* ,?,[ ],[^],[:space:],[:punct:],[:lower:],[:upper:],[:digit:],[:alnum:]等等。
在linux中,有通配符及正則表達式,那么什么是通配符和正則表達式,什么時候用?
通配符
它是由shell解析,並且一般用於匹配文件名,實際上就是shell解釋器去解析的特殊符號,linux系統通配符有幾下幾種:
*:匹配任意多個字符
?:匹配任意一個字符
[...]:匹配中括號內出現的任意一個字符
[!...]:不匹配中括號內出現的任意一個字符
一般出現在要shell命令或腳本中,匹配特定的文件名
正則表達式
它是一個字符匹配標准,一些命令工具按此標准實現字符匹配,根據命令支持的匹配功能可分為基礎正則表達式和擴展正則表達式,常用於支持正則表達式的工具,如sed,grep,awk...
有如下一些常用的匹配元字符:
字符匹配
.:匹配任意單個字符
*:匹配其前面一個字符出現任意次
?:匹配其前面的字符1次或0次
+:匹配其前面一個字符出現至少一次(在擴展正則表達式中)
位置匹配
^:錨定行首
$:錨定行尾
\<或\b:錨定詞首,其后面的任意字符必須作為單詞首部出現
\>或\b:錨定詞尾,其前面的任意字符必須作為單詞尾部出現
\B:非單詞的開頭或結尾
^$:空白行
分組() :
(ab)* : 匹配ab這個分組出現任意次
\1:引用第一個左括號以及與之對應的右括號所包括的所有內容,同理還有\2,\3
特殊子字符類:
[:alnum:] :任何字母和數字
[:alpha:] :任何字母
[:cntrl:] :控制字符. 在ASCII表中對應八進制000 到 037, 和177 ('DEL').
[:digit:] :任何數字
[:graph:] :匹配打印字符,相當於'[:alnum:]' +'[:punct:]'.
[:lower:] :小寫字母
[:print:] :可打印字符,相當於 '[:alnum:]', '[:punct:]', 和space.
[:punct:] 標點符號,'! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ' { | } ~'
[:space:] 空白字符,tab, newline, vertical tab, form feed, carriage return, and space.
[:upper:] 大寫字母
[:xdigit:] 任何16進制的數字,相當於[0-9a-fA-F]
所以:^[[:space:]]*$ :匹配沒有任何內容的行
需要注意:[]中的特殊字符如.已經失去了其特殊含義,和方括號中的普通字符[abc]一樣。
方法/步驟
-
* 匹配任意長度的任意字符
?匹配任意單個字符
比如我們創建abc,a1c,a1bc,a12c四個文件(touch abc a1c a1bc a12c)
ls a*c 表示查看a開頭c結尾的所有文件(abc,a1c,a1bc,a12c)
ls a?c 表示查看a開頭c結尾中間帶有一個字符的文件(abc,a1c)
-
[ ]匹配制定范圍內的單個字符[^]匹配制定范圍外的單個字符
ls a[0-9]c 列出a開頭c結尾中間帶有一個數字的文件
ls a[0-9][a-z]c 列出a開頭c結尾中間帶有一個數字和一個字母的文件
ls a[^0-9]c 列出a開頭c結尾中間帶有一個數字的文件
其輸出結果如下圖
-
[:space:]匹配單個空白字符
[:punct:]匹配單個標點符號字符
[:lower:]匹配單個小寫字母字符
[:upper:]匹配單個大寫字母字符
[:digit:]匹配單個數字字符
[:alnum:]匹配單個數字和字母字符
以上通配符在使用時還需在加一個[ ]
例如:
list a[[:space:]]b 列出a空格b的文件
list a[[:space:]][[:space:]] 列出a空格空格b的文件