1. 程式人生 > 其它 >Linux find和grep 正則表示式

Linux find和grep 正則表示式

內容概要

  • find命令
  • 正則表示式
  • Linux三劍客之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