1. 程式人生 > 其它 >Linux三劍客之grep(包含find&正則)

Linux三劍客之grep(包含find&正則)

1. find

查詢"檔案"
根據檔案的名稱或者屬性查詢檔案
man find

"語法格式:"
    find [查詢範圍/ ./...] [引數]
"引數:"
    -name    按照檔案的名字查詢檔案
    *        萬用字元
    -iname   按照檔案的名字查詢(忽略大小寫)
    等同於 -i  -name
    -size    按照檔案的大小查詢檔案
       +n    大於指定大小
       -n    小於指定大小
    沒有符號  等於
    -mtime   按照修改時間查詢
    +(可以省略)  n天以前
    -           n天以後
    -ctime
    -atime
    -user    按照使用者的屬主查詢
    -group   按照使用者的屬組查詢
    -type    按照檔案的型別查詢
         f,l,d,s,p,c,b..
    -perm    按照檔案的許可權查詢
    -inum    根據index node號碼查詢
    -a       並且(可以省略,預設是 並且)
    -o       或者
    -maxdepth  查詢的目錄深度(必須放置於第一個引數位)
    -exec    將前面find處理好的結果交給其他命令繼續處理

"知識儲備:"
    dd    生成檔案
    # dd if=/dev/zero of=100.txt bs-10M count-10
        if:從什麼地方讀檔案
        of:寫入到什麼檔案
        bs:每次寫入多少內容
        count:寫入多少次

"案例:"
    案例1:
    查詢/etc目錄下hosts檔案
    find [/etc/] -name 'hosts'

    案例2:
    查詢/etc目錄下名稱中包含hosts檔案
    find /etc/ -name '*hosts*'
    '*hosts'

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

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

2. grep

Linux三劍客之一,文字過濾器(根據文字內容過濾檔案)
"語法格式:"
    grep [引數] [匹配規則(文字內部內容)] [操作物件]

"引數:"
    -n  過濾文字時,將過濾出來的內容在檔案內的行號顯示出來
    -A  匹配成功之後,將匹配行的後n行顯示出來
    -B  匹配成功之後,將匹配行的前n行顯示出來
    -C  匹配成功之後,將匹配行的前後各n行顯示出來
    -c  只顯示匹配成功的行數
    -o  只顯示匹配成功的內容
    "-v"  反向過濾(非常重要)
    -q  靜默輸出(echo $?)
    -i  忽略大小寫
    -l  匹配成功之後,將文字的名稱打印出來
    -R/r  遞迴匹配
    # 在/etc目錄下由多少個檔案包含root,
    # grep -rl 'root' /etc/ | wc -l

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

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

3. 正則表示式

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

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

3. 拓展正則(egrep或者grep -E)
    {}   匹配的次數
        {n}   匹配n次
        {n,}  至少匹配n次
        {n,m} 匹配n到m次
        {,m}  最多匹配m次,最少0次
    +    匹配至少有一個前導字元
    ?    匹配0個或1個前導字元
    |    或

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

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

    案例x:匹配
    grep 'f*'  test.txt 0和多個都匹配出來

    案例3:匹配本機中有哪些ip
    ip a | egrep -o '[0-9]{1,3}/.{3}[0-9]{1,3}'
	
    案例4:將/etc/fstab中去掉包含#開頭的行,且要求# 後至少有一個空格
    egrep '^#\ +'  /etc/fstab

    案例5:找出檔案中至少有一個空格的行
    egrep '\ +'
   
    案例6:將nginx.conf檔案中以#開頭的行和空行全部排除
    egrep -v '^\ *#|^$'  /etc/nginx/nginx.conf