歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> find的-regex與-name的區別

find的-regex與-name的區別

日期:2017/3/1 17:02:32   编辑:關於Linux
find的-regex與-name的區別 1. 與-name, -iname最大的區別就在於 -regex是把find輸出的整個結果(有別於絕對路徑名)作為要匹配的對象, 而不僅僅是結果的最後一部分 www.2cto.com 舉例 /tmp目錄下有且僅有 aaa, aa, 1, 2 這些文件 find -name "a*"可以找到 aaa和aa 而find /tmp -regex "a*"就不行, 它一個都找不到, 因為找到的每個結果是這樣的 /tmp/aaa /tmp/aa -name 是對結果中的"aaa"和"aa"這個部分進行匹配, 而-regex卻是對完整的 "/tmp/aaa"和"/tmp/aa"進行匹配. 所以你要寫作find /tmp -regex ".*a.*" 2. 注意上面的是.*而不是* www.2cto.com -name所能解釋的是基於shell中file glob的匹配字符, 包括: (1)*表示任意長度字符串 (2)?表示任意的單個字符 (3)[set] 表示一個可選字符集合 (4)[^set]或[!set]表示以ASCII為全集對[set] 求補集的一個集合 (5)brace expansion, 即把/tmp/{a,b,c}擴展為三個字串 /tmp/a /tmp/b 和/tmp/c 注意 shell的file globing機制往往不被認為是正則表達式. -regex接受的是"正統"的正則表達式 這個說起來東西多了, 基本上它跟emacs文檔裡講的regex是一樣的, 因為find手冊裡regex的解釋部分實際就是鏈接到emacs 中講解regex的那個部分. 在上面例子中最大區別就是.* 來表示任意長度字符串.
Copyright © Linux教程網 All Rights Reserved