Linux三劍客之grep(包含find&正則)
阿新 • • 發佈:2021-12-20
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