文件与目录(权限,操作,搜索)

文件与目录(权限,操作,搜索)
==================================================

一:权限
---------------------------------------------------------------------------------------------
用户和权限管理:
    
    进程安全上下文:
        进程:运行一个程序文件而产生,通常由一个用户发起;进程则以发起者的身份运行;
        判断进程的发起者是否与文件属主相同,如果是,则以属主的身份来访问,从而应用属主权限;否则
        判断进程的发起者是否属于文件的属组,如果是,则应用属组权限;否则
        应用“其它”权限
        
        例外场景: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

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