在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]一樣。