文件與目錄(權限,操作,搜索)

文件與目錄(權限,操作,搜索)
==================================================

一:權限
---------------------------------------------------------------------------------------------
用戶和權限管理:
    
    進程安全上下文:
        進程:運行一個程序文件而產生,通常由一個用戶發起;進程則以發起者的身份運行;
        判斷進程的發起者是否與文件屬主相同,如果是,則以屬主的身份來訪問,從而應用屬主權限;否則
        判斷進程的發起者是否屬於文件的屬組,如果是,則應用屬組權限;否則
        應用“其它”權限
        
        例外場景:factl, suid, sgid, sticky

    文件系統文件權限:
        三類用戶:
            屬主:owner, u
            屬組:group, g
            其它:other, o
        權限:
            r: readable,可讀
            w: writable, 可寫
            x:excutable, 可執行 
    權限管理:
        文件:
            r:可獲取文件的數據
            w:可修改文件的數據
            x:可將此文件運行爲進程
        目錄:
            r:可使用ls命令獲取其下的所有文件列表;但不可以使用“ls -l”去獲取詳細信息,也不可以cd至此目錄中
            w:可修改此目錄下的文件列表, 即可以在此目錄下創建或刪除文件
            x:可以使用"ls -l“命令來獲取其下的文件的詳細屬性信息,也可cd至此目錄中
        rwxrwxrwx:
            owner: rwx 
            group: rwx 
            other: rwx 
        權限組合機制:
            以owner爲例:
                        二進制     八進制
            ---         000         0   
            --x         001         1
            -w-         010         2
            -wx         011         3
            r--         100         4
            r-x         101         5
            rw-         110         6
            rwx         111         7
        例如:
                rwxr-xr-x:755
                rw-r--r--: 644

        ownership: 僅管理員有權限 
                改屬主:chown
                改屬組:chgrp
        mode(permission):僅屬主
                chmod                
---------------------------------------------------------------------------------------------
(*)chmod:改變文件模式位
SYNOPSIS:
       chmod [OPTION]... MODE[,MODE]... FILE...
       chmod [OPTION]... OCTAL-MODE FILE...
       chmod [OPTION]... --reference=RFILE FILE...      
OPTIONS:(用戶的標識符:u,g,o,a)
        (1) chmod [OPTION]... MODE[,MODE]... FILE...
            MODE:
                賦權表示法:直接操作一類用戶的所有權限位rwx;
                    u=
                    g=
                    o=
                    a=
                    
                    兩類用戶權限相同:ug=, go=
                    不同類的用戶權限不同:u=,g=,o=
                    
                授權表示法:操作一類用戶一位或多位權限;
                    u+, u-
                    g+, g-
                    o+, o-
                    a+, a-
                    
                    兩類用戶權限收授機制相同:ug+, ug-, ...
                    不同類的用戶權限不同:u+,g+,o+

                        ~]# chmod u=rwx bash.sh
                        ~]# chmod u-x bash.sh

                (2) chmod [OPTION]... OCTAL-MODE FILE...
                        ~]# chmod 755 bash.sh

                (3) chmod [OPTION]... --reference=RFILE FILE...
                    --reference=RFILE:RFILE表示參考其權限模型;
                    ~]# chmod --reference reference.sh bash.sh

                 -R, --recursive:遞歸修改;
                    ~]# chmod -R 755 Public/
---------------------------------------------------------------------------------------------
(*)chown:更改文件所有者和組
SYNOPSIS
       chown [OPTION]... [OWNER][:[GROUP]] FILE...
       chown [OPTION]... --reference=RFILE FILE...
OPTIONS:
        ~]# chown mdx bash.sh    (改變屬主)
        ~]# chown mdx:user bash.sh  (改變屬主是mdx,屬組是user)
        ~]# chown --reference reference.sh bash.sh   (參照reference.sh的所有者和組)

        -R, --recursive:遞歸修改(目錄)
            ~]# chown –R root:root rootfs
---------------------------------------------------------------------------------------------
(*)chgrp:變更文件或目錄的所屬組
SYNOPSIS
       chgrp [OPTION]... GROUP FILE...
       chgrp [OPTION]... --reference=RFILE FILE...
OPTIONS:
        ~]# chgrp user bash.sh (變更bash.sh文件所屬組爲user)
        ~]# chgrp --reference reference.sh bash.sh (參照reference.sh文件進行所屬組修改)

        -R, --recursive:遞歸(目錄)
              ~]# chgrp -R user Public/
---------------------------------------------------------------------------------------------
(*)umask:顯示或設定文件模式掩碼
            文件:
                666-umask
            目錄:
                777-umask
                
            注意:之所以文件用666去減,表示文件默認不能有執行權限;如果減得的結果中,u,g或o有執行權限時,則需要加1;
                
            顯示:
                ~]$ umask
                        0002

            設定:
                umask MASK
                    ~]$ umask 0333

            注意:此設定僅對當前shell進程有效
---------------------------------------------------------------------------------------------



二:查看,修改與統計
---------------------------------------------------------------------------------------------
(*)ls:列出指定目錄下的內容
SYNOPSIS:
       ls [OPTION]... [FILE]...
DESCRIPTION:
        -a, --all:顯示所有文件,包括.和..在內所有隱藏文件; 
        -A, --almost-all
        -l:use a long listing format
            drwxr-xr-x   2 root root   18 2月  29 03:38 account
                drwxr-xr-x:
                    d:文件類型,一個字符;
                    rwxr-xr-x:文件權限,permission;
                        perm:
                            r:readable
                            w:writable
                            x: excutable
                        權限三位一組。
                            左三位:屬主的訪問權限。
                            中三位:屬組的所有用戶的訪問權限。
                            右三位:其它(other)用戶的訪問權限。
                    2:數字,表示文件被硬鏈接的次數。
                    root:一個用戶名,表示當前文件的屬主(owner)。
                    root:一個組名,表示當前文件屬組(group)。
                    18:一個數值,表示當前文件的size,默認單位爲字節。
                    2月  29 03:38 :一個時間,表示文件最近一次被修改的時間。
                    account:文件名;
        -h, --human-readable:對數值做單位換算。
        -d:查看目錄自身的屬性。
        -R:recursive,遞歸顯示。
        -r:reverse,降序顯示。
        --color={never|auto|always}:何時着色顯示。
---------------------------------------------------------------------------------------------
(*)pwd:顯示工作目錄
            ~]$ echo $PWD (等同於 pwd)
                /home/mdx
            ~]$ echo $OLDPWD (上一次的工作目錄)
                /home/mdx/man
            ~]$ pwd
                /home/mdx
---------------------------------------------------------------------------------------------
(*)cd:change directory
SYNOPSIS:
        cd: cd [-L|[-P [-e]]] [dir]
DESCRIPTION:
        cd:切換回家目錄。
            注意:bash中,~表示用戶的家目錄。
        cd ~:切換回家目錄。
        cd  ~USERNAME:切換至指定用戶的家目錄。
        cd  -:在上一次所在目錄與當前目錄之間來回切換。
---------------------------------------------------------------------------------------------
(*)cat:連接並傾倒至輸出設備。
SYNOPSIS:
       cut OPTION... [FILE]...
DESCRIPTION:
        -n, --number: 對顯示出的行進行編號。
            ~]$ cat -n cd.php

        -E, --show-ends:顯示行結束符。
            ~]$ cat -E cd.php

        Ctrl+c:中止當前命令。
---------------------------------------------------------------------------------------------
(*)tac: cat的逆序。
---------------------------------------------------------------------------------------------
(*)file:查看文件內容類型
SYNOPSIS:
     file [-bchiklLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname]
          [-F separator] [-f namefile] [-m magicfiles] file ...
     file -C [-m magicfiles]
     file [--help]
OPTIONS:
    ~]$ file bash.sh 
            bash.sh: ASCII text
---------------------------------------------------------------------------------------------
(*)echo:回顯命令
SYNOPSIS
       echo [SHORT-OPTION]... [STRING]...
       echo LONG-OPTION
DESCRIPTION:
        -n:不自動附加換行符;
        -e:啓用轉義符;
            \n:換行
            \b:退格
            \t:水平製表符
            \v:垂直製表符
                        
            數據有其類型:決定了其存儲空間、能參與的運算
                ”127“:字符串
                    ASCII text:24bits
                127:數值
                    0111 1111:8bits
                    
            bash是弱類型的編程語言,不嚴格區分數據類型,意味把所有數據統統當作字符串處理;
                字符串類型的數據可不加引號; 
            引號有三種類型:', ", `
                ', ":字符引用
                    ': 強引用,其內部的變量不會被替換; 
                    ":弱引用,其內部的變量會被替換;
                `:命令引用
                
            變量引用:${NAME}
---------------------------------------------------------------------------------------------
(*)mkdir:創建目錄
SYNOPSIS:
       mkdir [OPTION]... DIRECTORY...
DESCRIPTION:
       -m, --mode=MODE:設定目錄權限
            ~]$ mkdir -m 755 dir

       -p, --parents:按需創建父目錄路徑。
            ~]$ mkdir -p a/b/c/d

       -v, --verbose:打印創建目錄的信息。
            ~]$ mkdir -v ab
                    mkdir: created directory ‘ab’
            ~]$ mkdir -pv a/b/c
                    mkdir: created directory ‘a’
                    mkdir: created directory ‘a/b’
                    mkdir: created directory ‘a/b/c’
---------------------------------------------------------------------------------------------
(*)rmdir:刪除空目錄
SYNOPSIS:
       rmdir [OPTION]... DIRECTORY...
DESCRIPTION:
       -p, --parents:刪除指定的目錄後,如果其父目錄爲空,則一併刪除之
            ~]$ rmdir -p a/b/c

       -v, --verbose:打印過程
            ~]$ rmdir -pv a/b/c/d
                    rmdir: removing directory, ‘a/b/c/d’
                    rmdir: removing directory, ‘a/b/c’
                    rmdir: removing directory, ‘a/b’
                    rmdir: removing directory, ‘a’
---------------------------------------------------------------------------------------------
(*)cp:複製文件或目錄
SYNOPSIS:
    單源複製:
       cp [OPTION]... [-T] SOURCE DEST
        注意:
            如果 DEST 不存在(僅指基名所指定的文件不存在)。
                事先創建DEST文件,而後複製源文件的內容導入至目標文件。
            如果 DEST 存在。
                如果 DEST 是目錄:則在此目錄中創建一個與原文件同名的文件,則導入其內容。
                如果 DEST 是非目錄文件:則覆蓋目標文件。       
    多源複製:
       cp [OPTION]... SOURCE... DIRECTORY
       cp [OPTION]... -t DIRECTORY SOURCE...
       注意:
            DEST 存在,且必須是目錄;否則即爲錯誤。
DESCRIPTION:
        ~]$ cp file.sh a/       (不指定文件名則爲默認)
        ~]$ ls a
                file.sh
        ~]$ cp file.sh a/aa.sh      (可以修改文件名)
        ~]$ ls a
                aa.sh

       -i, --interactive:交互式複製,即覆蓋目標文件之前提醒用戶確認。
            ~]$ cp -i file.sh a/       (沒有同名文件不提示)
            ~]$ cp -i file.sh a/        (有同名文件需確認 y 或者 n)
                    cp: overwrite ‘a/file.sh’? y

        -f, --force:強制覆蓋目標文件。
            ~]$ cp -f file.sh a/

        -R, -r, --recursive:遞歸複製目錄及其內容。
            ~]$ cp -R man Public/

        -P, --no-dereference:複製鏈接文件本身,而非默認的複製鏈接文件指向的源文件的內容。
        --preserve[=ATTR_LIST]。
            指明保留的源文件屬性列表。
                默認爲mode,ownership,timestamps。
                額外:context, links, xattr, all

        -a, --archive:歸檔複製
            -dR --preserve=all
            注意:僅管理員可保留屬主和屬組屬性;
---------------------------------------------------------------------------------------------
 (*)mv:剪切 (重命名) 文件或目錄
 SYNOPSIS:
       mv [OPTION]... [-T] SOURCE DEST
       mv [OPTION]... SOURCE... DIRECTORY
       mv [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION:
        -i, --interactive:交互式複製,即覆蓋目標文件之前提醒用戶確認。
        -f, --force:強制覆蓋目標文件。
 ---------------------------------------------------------------------------------------------
 (*)rm:刪除文件或目錄
SYNOPSIS
       rm [OPTION]... FILE...
OPTIONS
        -i, --interactive:每次刪除前提示
        -f, --force:強制刪除
        -r, -R, --recursive:遞歸刪除目錄及其內容
---------------------------------------------------------------------------------------------
(*)more:CRT查看文件瀏覽過濾。(和cat的功能一樣都是查看文件裏的內容,但有所不同的是more可以按頁來查看文件的內容,還支持直接跳轉行等功能。)
SYNOPSIS:
       more [options] file [...]
OPTIONS:
        +n      從笫n行開始顯示
        -n       定義屏幕大小爲n行
        +/pattern 在每個檔案顯示前搜尋該字串(pattern),然後從該字串前兩行之後開始顯示  
        -c       從頂部清屏,然後顯示
        -d       提示“Press space to continue,’q’ to quit(按空格鍵繼續,按q鍵退出)”,禁用響鈴功能
        -l        忽略Ctrl+l(換頁)字符
        -p       通過清除窗口而不是滾屏來對文件進行換頁,與-c選項相似
        -s       把連續的多個空行顯示爲一行
        -u       把文件內容中的下畫線去掉
COMMANDS:
        Enter    向下n行,需要定義。默認爲1行
        Ctrl+F   向下滾動一屏
        空格鍵  向下滾動一屏
        Ctrl+B  返回上一屏
        =       輸出當前行的行號
        :f     輸出文件名和當前行的行號
        V      調用vi編輯器
        !命令   調用Shell,並執行命令 
        q       退出more
---------------------------------------------------------------------------------------------
(*)less:less 與 more 類似,但 less 在查看之前不會加載整個文件。
SYNOPSIS
       less -?
       less --help
       less -V
       less --version
       less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
            [-b space] [-h lines] [-j line] [-k keyfile]
            [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
            [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
            [-# shift] [+[+]cmd] [--] [filename]...
       (See the OPTIONS section for alternate option syntax with long option names.)
COMMANDS:
    -b <緩衝區大小> 設置緩衝區的大小
    -e  當文件顯示結束後,自動離開
    -f  強迫打開特殊文件,例如外圍設備代號、目錄和二進制文件
    -g  只標誌最後搜索的關鍵詞
    -i  忽略搜索時的大小寫
    -m  顯示類似more命令的百分比
    -N  顯示每行的行號
    -o <文件名> 將less 輸出的內容在指定文件中保存起來
    -Q  不使用警告音
    -s  顯示連續空行爲一行
    -S  行過長時間將超出部分捨棄
    -x <數字> 將“tab”鍵顯示爲規定的數字空格
    /字符串:向下搜索“字符串”的功能
    ?字符串:向上搜索“字符串”的功能
    n:重複前一個搜索(與 / 或 ? 有關)
    N:反向重複前一個搜索(與 / 或 ? 有關)
    b  向後翻一頁
    d  向後翻半頁
    h  顯示幫助界面
    Q  退出less 命令
    u  向前滾動半頁
    y  向前滾動一行
    空格鍵 滾動一行
    回車鍵 滾動一頁
    [pagedown]: 向下翻動一頁
    [pageup]:   向上翻動一頁
---------------------------------------------------------------------------------------------
(*)head:輸出文件的前n行
SYNOPSIS:
       head [OPTION]... [FILE]...
DESCRIPTION:
        ~]$ head fstab 

        -n #:顯示前n行
        -#:等同於 -n #

        ~]$ head -3 fstab 
---------------------------------------------------------------------------------------------
(*)tail:查看文件的後n行
SYNOPSIS:
       tail [OPTION]... [FILE]...
DESCRIPTION:
        ~]$ tail fstab

        -n #:顯示後n行
        -#: 等同於 -n #
        -f:查看文件尾部內容結束後不退出,阻塞在文件上,追加了新內容時,會繼續顯示。
            ~]$ tail -f fstab

        終止:Ctrl+c
---------------------------------------------------------------------------------------------
(*)stat:顯示文件或文件系統狀態
SYNOPSIS:
       stat [OPTION]... FILE...
DESCRIPTION:
        文件的數據組成部分:
            元數據(metadata):存放於文件系統中的inode。
            數據(data):data blocks。
        文件的三個時間戳:
            access time:atime,文件最近一次被訪問的時間。
            modify time:mtime,文件最近一次被修改的時間(數據)。
            change time:ctime,文件最近一次改動的時間(元數據)。

        ~]$ stat fstab 
                  File: ‘fstab’
                  Size: 541         Blocks: 8          IO Block: 4096   regular file
                Device: fd02h/64770d    Inode: 134224909   Links: 1
                Access: (0664/-rw-rw-r--)  Uid: ( 1000/     mdx)   Gid: ( 1000/     mdx)
                Context: unconfined_u:object_r:user_home_t:s0
                Access: 2016-03-13 10:46:24.837003802 +0800
                Modify: 2016-03-13 10:45:50.112004210 +0800
                Change: 2016-03-13 10:45:50.112004210 +0800
                 Birth: -
---------------------------------------------------------------------------------------------
(*)touch:改變文件時間戳
SYNOPSIS:
       touch [OPTION]... FILE...
DESCRIPTION:
      -a:僅修改atime
       -c, --no-create:不創建文件(默認,打開文件不存在就會創建)
            ~]$ touch -c bash.sh
            ~]$ ls

       -m:僅修改mtime
       -t STAMP:使用指定的日期時間。格式:[[CC]YY]MMDDhhmm[.ss] 
---------------------------------------------------------------------------------------------
(*)wc:統計文件行數,單詞數和字節數
SYNOPSIS:
       wc [OPTION]... [FILE]...
       wc [OPTION]... --files0-from=F
DESCRIPTION:
        ~]$ wc fstab (默認格式)
             12     60        541   fstab
            行數 單詞數 字節數 文件名

       -c, --bytes:字節數
            ~]$ wc -c fstab 
            541 fstab

       -l, --lines:行數
            ~]$ wc -l fstab 
            12 fstab

       -w, --words:單詞數
            ~]$ wc -w fstab 
            60 fstab

        統計文數量但不輸出文件名:
            cat fstab |wc -l(-w,-c)
---------------------------------------------------------------------------------------------
(*)cut:從每行文件中刪除部分,(分隔符)
SYNOPSIS:
       cut OPTION... [FILE]...
DESCRIPTION:
       -d, --delimiter=DELIM:以指定的字符爲輸入分隔符;默認爲空白字符。

       -f, --fields=LIST
                #:指定的單個字段;
                #,#:離散的多個字段;例如1,3,7;
                #-#:連續的多個字段,例如4-7;
            ~]$ echo "a/b/c" |cut -d '/' -f 1

        --output-delimiter=STRING :輸出分隔符。
---------------------------------------------------------------------------------------------
(*)sort:文本文件排序
SYNOPSIS:
       sort [OPTION]... [FILE]...
       sort [OPTION]... --files0-from=F
DESCRIPTION:
        -r, --reverse:逆序排序。
        -u, --unique:相同的行只保留一次;連續且完全一樣方爲相同。
        -t CHAR:指定分隔符。
        -k #:用於做排序的字段。
        -n, --numeric-sort:基於數值大小進行比較。
        -f, --ignore-case:比較時忽略字符大小寫。
---------------------------------------------------------------------------------------------
(*)uniq:重複報告或省略
SYNOPSIS:
       uniq [OPTION]... [INPUT [OUTPUT]]
DESCRIPTION:
        -d, --repeated:僅顯示重複的行。
            ~]$ uniq -d fstab
        -u, --unique:僅顯示不曾重複的行。
            ~]$ uniq -u fstab
        -c, --count:在每行的行首顯示其出現的次數。
            ~]$ uniq -u fstab
---------------------------------------------------------------------------------------------
(*)diff:比較文件行
SYNOPSIS:
       diff [OPTION]... FILES
DESCRIPTION:
        -u, -U NUM, --unified[=NUM]:使用unified機制,即顯示要修改的行上下文,默認爲3行。
---------------------------------------------------------------------------------------------
(*)patch:應用更改文件(補丁)
SYNOPSIS:
       patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]
               [-o outfile][-p num][-r rejectfile][file]
DESCRIPTION:
        -i /PATH/FROM/PATCH_FILE:指明補丁文件路徑。
        -R  or  --reverse:還原。
---------------------------------------------------------------------------------------------
(*)install:複製文件和設置屬性
SYNOPSIS:
       install [OPTION]... [-T] SOURCE DEST
       install [OPTION]... SOURCE... DIRECTORY
       install [OPTION]... -t DIRECTORY SOURCE...
       install [OPTION]... -d DIRECTORY...
DESCRIPTION:
        -o OWNER:指定屬主。
        -g  GROUP:指定屬組。
        -m MODE: 指定權限。
---------------------------------------------------------------------------------------------
(*)mktemp:創建臨時文件或目錄
SYNOPSIS:
       mktemp [OPTION]... [TEMPLATE]
DESCRIPTION:
        模板文件名:filename.XXX
            至少三個X;
            
        使用方式:用變量保存生成的文件路徑;
            myfile=$(mktemp /tmp/myfile.XXXX)
            
        常用選項:
            -d:創建臨時目錄而非文件;
            -p DIR, --tmpdir[=DIR]:設定臨時文件所在的目錄;默認爲當前目錄,或爲TMPDIR環境變量設定的路徑;
---------------------------------------------------------------------------------------------


三:搜索匹配
Linux上文本處理三劍客:
    grep, egrep, fgrep:文本搜索工具;基於”pattern“對給定文本進行搜索操作。
    sed:Stream EDitor,流編輯器,行編輯工具;文本編輯工具。
    awk:GNU awk,文本格式化工具;文本報告生成器.
---------------------------------------------------------------------------------------------
(*)awk:模式掃描和處理語言
SYNOPSIS:
        awk  -F CHAR  '/pattern/{print $1, $2, ...}'  FILE...
OPTIONS:
        -F:指明輸入分隔符。
                $1, $2, ...:處理哪些字段。
        ~]$ awk -F ':' '/root/{print $7}' /etc/passwd
---------------------------------------------------------------------------------------------
(*)grep:打印出符合 pattern(過濾條件)的行
SYNOPSIS:
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
OPTIONS:
        --color[=WHEN], --colour[=WHEN]:對匹配到的文本着色後高亮顯示。
            example:
                WHEN:never, always,  auto(默認).

        -i, --ignore-case:忽略字符大小寫。
        -o, --only-matching:僅顯示匹配到的文本。
        -v, --invert-match:反向匹配。
        -E, --extended-regexp:支持擴展的正則表達式。
        -q, --quiet, --silient:不輸出任何信息,直接退出。
        -n:輸出行號。
        -c:計算找到‘搜索字符串’的次數。
        -A NUM, --after-context=NUM: 匹配結果並將匹配結果的後#行一併顯示 
        -B NUM, --before-context=NUM:  匹配結果並將匹配結果的前#行一併顯示 
        -C NUM, -NUM, --context=NUM:A and b 顯示匹配結果前和後各幾行。 
        -F, --fixed-strings:支持使用固定字符串,不支持正則表達式,相當於fgrep。
        -G, --basic-regexp:支持使用基本正則表達式。
        -P, --perl-regexp:支持使用pcre正則表達式。
        -e PATTERN, --regexp=PATTERN:多模式機制。
        -f FILE, --file=FILE:FILE爲每行包含了一個pattern的文本文件,即grep script。

基本正則表達式元字符
    字符匹配:
            .:匹配任意單個字符。
            [ ]:匹配範圍內的任意單個字符。
            [^ ]:匹配範圍外的任意單個字符。
            \d  或者 [:digit:]    :  數字。等效於 [0-9]。
            \D  匹配任意一個除十進制數字以外的字符,等價於[^0-9]  
            \s:匹配任意一個空白符,等價於[\f\n\r\t\v] 
                    \f  匹配一個換頁符。
                    \n  匹配一個換行符。  
                    \r  匹配一個回車符。
                    \t  匹配一個製表符。
                    \v  匹配一個垂直製表符。
            \S:匹配非打印字符以外字符。與 [^ \f\n\r\t\v] 等效
            \w:匹配任意一個數字、字母或下畫線,等價於[0-9a-zA-Z_]  
            \W:匹配一個除數字、字母或下畫線以外的任意一個字符,等價於[^0-9a-zA-Z_]  
            [:lower:]:小寫英文字母
            [:upper:]:大寫英文字母
            [:alpha:]:所有字母
            [:alnum:]:所有字母和數字,相當於[0-9a-zA-Z]
            [:space:]:空白字符,相當於\s
            [:blank:]:空格或製表符
            [:punct:]:標點符號
            [:xdigit:] :十六進制字符;任何數量或––F或F
            [:print:] :任何可打印的字符(不控制字符)
            [:graph:] :排除空白字符
            [:cntrl:] :控制字符

    匹配次數:
            *               :前面的字符任意次(0,1或多次)
            \+              :前面的字符 1次 或多次
            \?              :前面的 0次或1次。
            \{m\}        :前面的字符出現m次,m爲非負整數;
            \{m,n\}     :前面的字符出現m次,m爲非負整數;[m,n]

            注意:這幾個字符需要轉義。

    匹配位置:
            ^ : 錨定行首 
            $ : 錨定行尾
            \<或\b:詞首錨定,格式爲 \<PATTERN, \bPATTERN
            \>或\b:詞尾錨定,格式爲 PATTERN\>, PATTERN\b

    分組與引用:
        分組:() 括號進行分組
            pat1\(pat2\)pat3\(pat4\(pat5\)pat6\)
            \(PATTERN\):將此PATTERN匹配到的字符當作一個整體進行處理。
        引用:\1  \2   \3  分組括號中匹配到的字符被存儲於正則表達式內部的變量中。
                \1:pattern匹配到的第一組括號
                \2:pattern匹配到的第二個括號
                \3:pattern匹配到的第三個括號
                .....
                注意:按括號順序進行排序。

instantiation: 
        ~]# grep "\<[0-9]\{3,4\}\>" /etc/passwd
        ~]# grep -v "bash$" /etc/passwd
---------------------------------------------------------------------------------------------
(*)egrep:支持使用擴展正則表達式的grep命令,相當於grep -E;
SYNOPSIS
       grep [OPTIONS] PATTERN [FILE...]
       grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
OPTIONS:與grep相同。
        擴展正則表達式的元字符:
                字符匹配:
                    .:任意單個字符
                    [ ]:範圍內的任意單個字符
                    [^ ]:範圍外的任意單個字符
                    
                匹配次數:
                    *:任意次;
                    ?:0次或1次;
                    +:1次或多次;
                    {m}:匹配m次;
                    {m,n}:至少m次,至多n次;
                    {m,}:最少m次。
                        
                位置錨定:
                    ^:行首
                    $:行尾
                    \<, \b:詞首
                    \>, \b:詞尾
                    
                分組及引用:
                    (pattern):分組,括號中的模式匹配到的字符會被記錄於正則表達式引擎內部的變量中;
                    後向引用:\1, \2, ...
                或者:
                    a|b:a或者b
                        C|cat:表示C或cat
                        (C|c)at:表示Cat或cat

instantiation:
        ~]# egrep "^(s|S)" /tmp/meminfo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章