文件通配符是啥?

文件通配符

    包含 ‘?’, ‘*’ ‘[‘ 字符的字符串稱為通配符模板(wildcard  pattern).形成路徑名(globbing)指一種操作,把通配符模板展開為匹配該串的路徑名.匹配定義為:

    不在 括弧中的‘?’匹配任意單個字符。

    不在方括弧中的‘*’匹配任意字符串,包括空串。

1、字符集 (Character classes)

    對于表達式`[…]’,如果在第一個 ‘[‘ 符后面出現的第一個字符不是 ‘!’, 則該表達式 匹配任意一個在 `[…]’ 內出現的字符.方括弧內不能有空串,因此 ‘]’ 可以作為第一個字符出現在方括弧內. (像這樣, ‘[][!]’ 匹配下列三個字符中的任意一個, ‘]’, ‘[‘ ‘!’.)

1.1、范圍集 (Ranges)

    字符集有一個特例:‘-‘ 分開的兩個字符表示一個范圍集.(像這樣, `[A-Fa-f0-9]’ 等于 `[ABCDEFabcdef0123456789]’.)‘-‘ 放到方括弧內的開頭或最后可以獲得它的本意.  (像 這樣, `[]-]’ 匹配‘]’‘-‘ 中任意一個.`[-./]’ 匹配 `-‘, `.’ `/’中 任意 一個.)

1.2、補集 (Complementation)和特殊含義字符的本意表達

    表達式 ‘[!…]’ 表示一個字符,該字符不匹配方括弧內去掉開頭 ‘!’ 后的表達式. (像 這樣, `[!]a-]’ 匹配除了 ‘]’, ‘a’ ‘-‘ 的任意一個字符.)

    要去掉 ‘?’, ‘*’ ‘[‘ 的特殊含義,可以通過前面加一個反斜杠;或者在shell命令行中,通過引號來引用這些字符.在方括弧內這些字符顯露出本意,所以, ‘[[?*\]’ 匹配 這 四個字符 中的一個: ‘[‘,’?’, ‘*’, ‘\’.

2、路徑名 (PATHNAME)

    形成路徑名功能應用于路徑中的每一個成員部分.路徑中的 ‘/’ 不能被通配符‘?’ ‘*’, 或范圍集匹配

‘[.-0]’ 匹配.范圍集不能直接包含 ‘/’, 否則 導致 語法錯誤.

    如果待匹配的文件名以‘.’開頭,那么這個 ‘.’ 字符必須直接給出. (比如說, rm *’ 不會刪除 ‘.profile’ 文件, ‘tar c *’ 不會打包你的所有文件;‘tar c .’ 會更好.)

3、空列表 (EMPTY LISTS)

    上述的簡單優雅規則,把通配符模板展開為匹配的路徑名,來源于最初的UNIX定義.它允許展開出空串。

例如xv -wait 0 *.gif *.jpg這里可能沒有 *.gif 文件(而且不算錯誤).然而, POSIX 要求句法錯誤或路徑名列表為空時,保留通配符模板不變.(即不展開)

4、正則表達式和通配符的區別

    正規表達式 (Regular expressions)

注意,通配符模板不是正規表達式,盡管它們有點象.首先,它匹配文件名,而不是正文;其次,規則不一樣,例如正規表達式里的 ‘*’ 代表零個或多個前面內容的重復.正規表達式的方括弧表達式用 ‘^’ 引導取反操作, (而不是 ‘[!…]’). POSIX 聲明, 在通配符模板中, ‘[^…]’ 未做定義.

5、字符集和國際化(Character classes and Internationalization )

當然,范圍集最初指ASCII的范圍,因此 ‘[ -%]’ 意思是 ‘[ !”#$%]’, ‘[a-z]’ 指所有小寫字符.

一些UNIX實現把這個歸納為:范圍 X-Y X 的編碼到 Y 的編碼之間的編碼字符. 可是,這要求用戶知道他們本地系統的字符編碼,此外,如果本地的字母表順序和字符集順序不對應,那就更不方便了.

因此, POSIX 對通配符模板和正規表達式的方括弧表達法作了重大擴展,上面我們知道了方括弧表達式中的三個類型,它們是取補集(i)、直接列出的單個字符(i)和范圍集(ii).

POSIX 對范圍集在國際化方面作了更有力的說明,并且增加了三個類型:

(ii) 范圍 X-Y X Y 之間所有的字符組成(包括XY), X Y 的 當前編碼序列由當前場合的 LC_COLLATE 分類定義

(iv) 命名字符集,

:

[:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]

[:digit:]  [:graph:]  [:lower:]  [:print:]

[:punct:]  [:space:]  [:upper:]  [:xdigit:]

    因此可以用 ‘[[:lower:]]’ 代替 ‘[a-z]’, 它在丹麥語里同樣有效,雖然丹麥的字母表里 ‘z’ 后面還有三個字母.這些字符集由當前場合的 LC_CTYPE 分類定義.

(v) 符號對映,‘[.ch.]’ ‘[.a-acute.]’, ‘[.’  和  ‘.]’ 之間的字符串是定義在當前場合的對映元素.注意這可以是多字符元素.

(vi) 等類表達式,‘[=a=]’ ,‘[=’ ‘=]’ 之間的字符串是任意等類中的對映元素, 它定義在當前場合. 例如, ‘[[=a=]]’ 可以等同于 `[a徉溻]’ (警告:這里有Latin-1字符),也就是 `[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]’.

原創文章,作者:TQT,如若轉載,請注明出處:http://www.www58058.com/73939

(0)
TQTTQT
上一篇 2017-04-23
下一篇 2017-04-23

相關推薦

  • N22-第三周作業

    列出當前系統上所有已經登錄的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# w |cut -d ' ' -f1 |sort -u lucy root USER 2.取出最后登錄到當前系統的用戶的相關信息。 [root@localhost ~]# last -1 root   &nbs…

    Linux干貨 2016-08-28
  • 第十周

    請詳細描述CentOS的啟動流程     啟動第一步–加載BIOS         當打開計算機電源,計算機會首先加載BIOS信息,BIOS信息是如此的重要,以至于計算機必須在最開始就找到它,這是因為BIOS中包含了CPU的相關信息、設備啟動順序信息、硬盤信…

    Linux干貨 2017-01-03
  • 學習宣言

    別人笑我太瘋癲,我笑他人看不穿。不見五陵豪杰墓,無花無酒鋤作田。

    Linux干貨 2016-10-24
  • 網絡管理3

    七、網絡接口配置-bonding     Bonding         就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,…

    Linux干貨 2016-09-10
  • 淺談Linux賬號與用戶組管理

    在學習linux系統中,最重要的莫過于對系統賬戶的管理以及如何恰當的分配用戶組權限。在我們登陸linux系統的時候,輸入的賬號,其實并不是linux所能識別的。由于計算機僅能夠識別0與1,所以它僅能認識ID(一組號碼)用戶標示符UID、GID。相應的你所輸入的賬號與ID的對應關系就保存在/etc/passwd當中。 對于每一個文件來說都具有”所有者與所屬用戶…

    2017-07-22
  • Bash的基礎特性(二)

    Bash的基礎特性(二) glob文件通配符 (* ; ? ; [ ] ; [^ ] ) 星號* 匹配任意所有字符的 [root@lyp ~]# ls h* hello.sh hello.shbak ?匹配單個字符 ls ???? 查看四個字符命名的文件 [0-9]匹配數字 [a-z] 字母 字母的順序安裝 a A b B c C… z Z 匹配的a-z […

    Linux干貨 2017-04-01

評論列表(1條)

  • renjin
    renjin 2017-04-28 11:20

    對文件能配符進行了介紹,內容介紹的很詳細,排版需要再往好的排一下!

欧美性久久久久