1. 程式人生 > 其它 >find、三劍客之grep、正則表示式

find、三劍客之grep、正則表示式

find

    根據檔案的名稱或者屬性查詢檔案。

    語法格式:
        find   [查詢範圍]  [引數]

    引數:
        -name : 按照檔案的名字查詢檔案
            * :萬用字元
        -iname :  按照檔案的名字查詢檔案(忽略大小寫)
        -size : 按照檔案的大小查詢檔案
            +	: 大於
            -	: 小於
            沒符號 : 等於

        -mtime : 按照修改時間去查詢
            +(可以省略) : n 天以前
            - 			: n 天以內
        -atime
        -ctime 

        -user :按照使用者的屬主查詢
        -group : 按照使用者的屬組查詢
        -type : 按照檔案的型別查詢
            d : 資料夾
            l : 連結檔案
            s : 套接字檔案
            p : 管道檔案
            c : 字元檔案
            b :磁碟檔案
            f : 普通檔案

        -perm : 按照檔案的許可權查詢
        -inum : 根據index node號碼查詢

        -a : 並且(可以省略,預設時並且)
        -o : 或者
        -maxdepth : 查詢的目錄深度(必須放置與第一個引數位) 

        -exec : 將find處理好的結果交給其他命令繼續處理。

    知識儲備:
        dd : 生成檔案
            if 		:從什麼地方讀
            of 		: 寫入到什麼檔案
            bs 		: 每次寫入多少內容
            count 	: 寫入多少次

    案例:
        案例1:查詢/etc目錄下hosts檔案
            [root@localhost ~]# find /etc/ -name 'hosts'
            /etc/hosts
        案例2:查詢/etc目錄下名稱中包含hosts檔案
            [root@localhost ~]# find /etc/ -name '*hosts*'

        案例3:要求把/etc目錄下,所有的普通檔案打包壓縮到/tmp目錄
            [root@localhost /tmp]# tar -czPf /tmp/etcv2.tar.gz `find /etc/ -type f | xargs`

    知識儲備
        | : 前面一個命令的結果交給後面一個命令處理
        xargs : 把處理的文字變成以空格分割的一行
        `` : 提前執行命令,然後將結果交給其他命令來處理

三劍客之grep

    linux三劍客之一,文字過濾器(根據文字內容過濾檔案)。

    語法格式:
        grep [引數] [匹配規則] [操作物件]

    引數:
        -n : 過濾文字時,將過濾出來的內容在檔案內的行號顯示出來
        -A : 匹配成功之後,將匹配行的後n行顯示出來
        -B : 匹配成功之後,將匹配行的前n行顯示出來
        -C : 匹配成功之後,將匹配行的前後各n行顯示出來
        -c :  只顯示匹配成功的行數
        -o :  只顯示匹配成功的內容
        -v :  反向過濾
        -q :  靜默輸出
        -i : 忽略大小寫
        -l :  匹配成功之後,將文字的名稱打印出來
        -R|-r : 遞迴匹配 

        -E : 使用拓展正則   等價於  egrep

    知識儲備:
        $? : 上一行命令執行的結果,0代表執行成功,其他數字代表執行失敗。
        wc :  匹配行數
            -l : 列印匹配行數
            -c : 列印匹配的位元組數


    在/etc目錄下,有多少個檔案包含root。
        grep -rl 'root' /etc/ | wc -l

正則表示式

    1、正則表示式的分類(grep)
        1、普通正則表示式
        2、拓展正則表示式

    2、普通正則表示式

        ^ : 以某字元開頭
        $ : 以某字元結尾
        . : 匹配除換行符之外的任意單個字元
        * :匹配前導字元的任意個數
        [] : 某組字串的任意一個字元
        [^]      : 取反
        [a-z]    : 匹配小寫字母
        [A-Z]    : 匹配大寫字母
        [a-zA-Z] : 匹配字母
        [0-9] 	 : 匹配數字
        \ 		: 取消轉義
        ()		: 分組
            \n : 代表第n個分組

    3、拓展正則
        {}     :匹配的次數
            {n}		: 匹配n次
            {n,}	:至少匹配n次
            {n,m}	:匹配 n 到 m 次
            {,m}	:最多匹配m次
        +      :匹配至少有一個前導字元
        ?      : 匹配一個或零個前導字元
        |      :或

    案例:
        案例1:在/etc/passwd檔案中,匹配以ftp開頭的行
            grep '^ftp' /etc/passwd

        案例2:在/etc/passwd檔案中,匹配以bash結尾的行
            grep 'bash$' /etc/passwd

        案例3:匹配本機中有哪些ip
            ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'

        案例4:要求將/etc/fstab中的去掉包含 # 開頭的行,且要求 # 後至少有一個空格
            grep -vE '^#\ +' /etc/fstab

        案例5:找出檔案中至少有一個空格的行
            grep -E '\ +' xxx

        案例6:將 nginx.conf 檔案中以#開頭的行和空行,全部刪除 
            grep -vE '^\ *#|^$' /etc/nginx/nginx.conf