10.17.2020

Linux的find和grep指令

這一次自己要記下的,是在Linux環境下用到爛掉的findgrep指令;前者是用來找檔案,而後者則是在檔案中尋找特定的字串
[root@localhost]# 
[root@localhost]# find ./ -name "*.txt" -print^C
[root@localhost]# 
上述的指令是非常基本的用法;但還有一些不錯用的參數值得記一下:

-name: 指定檔案名稱,這個檔案名稱也可以搭配正規表示法 (Regular Expression)

-iname: 指定檔案名稱,但不區分大小寫字母

-type: 可以蒐尋特定的檔案類型;所謂的檔案類型,就是當我們執行"ls -l"指令時,每1個檔案最前面的字母。如下:
  • -: 一般檔案 (File)
  • d: 目錄 (Directory)
  • b: 區塊設備 (Block)
  • c: 字元設備 (Character)
  • l: 符號連結軟連結檔案 (Symbol Link)
  • p: 管線檔案 (Pipe)
  • s: 網路套接檔案 (Socket)
-xtype: 與"-type"類似,但只會查找Symbol Link型態的檔案。

-perm: 查找特定權限 (Permission)的檔案,如"-perm 0777"。

-empty: 尋找空的檔案或是空的目錄,如:
[root@localhost]# 
[root@localhost]# find ./ -type f -empty
[root@localhost]# 
[root@localhost]# find ./ -type d -empty
[root@localhost]# 
-user / -group: 指定尋找檔案特定的使用者或是群組,例如:-user "picasso"-group "chinese"

-size: 指定尋找檔案特定的大小:
  • -size 50M // 剛好是 50 MB
  • -size +50M // 大於 50 MB
  • -size -100M // 小於 100 MB
  • -size +50M -size -100M // 大於 50 MB ,且小於 100 MB
-print: 把尋找的結果列印出來。這裡的列印並不是指印表機的列印,而是指輸出到Console。

-exec: 把查找出來的結果,執行 (Execution)某個命令指令。如:
[root@localhost]# 
[root@localhost]# find ./ -name ".git" -exec rm -rf
[root@localhost]# 
不過,並不建議使用"-exec"參數;可以改使用管線 (Pipe)搭配"xargs"指令:
[root@localhost]# 
[root@localhost]# find ./ -name ".git" | xargs -r rm -rf
[root@localhost]# 
grep (Globally search for Regular Expression and print it)的基本指令用法:
[root@localhost]# 
[root@localhost]# grep "Hello!! World!! " ./ -r
[root@localhost]# 
-i: 關鍵字不分大小寫字母。

-n: 找出來的資料要顯示行號。

-v: 反向匹配。即沒有關鍵字的那幾行。

-r: 遞迴搜尋。即該目錄下的所有檔案。

--include="(fine name)": 可以指定特定的檔案。

有些檔案是無法讀取的,強制執行時會發生錯誤訊息;可以在執行grep指令的最後加上:2> /dev/null

-A (n): 找到該筆資料的前一行 (After)

-B (n): 找到該筆資料的後一行 (Before)

-C (n): 找到該筆資料的前後各一行 (Current)

--color=never / always / auto: 用顏色來明顯地標示出該行資量的所在位置。

以下是grep指令常搭配的正規表示法應用。

"^a": 以'a'為開頭的字串。

"b$": 以'b'為結尾的字串。

"^[ab]": 以'a''b'為開頭的字串。

"[ab]$": 以'a''b'為結尾的字串。

"^ab": 以"ab"為開頭的字串。

"ab$": 以"ab"為結尾的字串。

"ab | cd": 含有"ab""cd"的字串。

"\bnet\b": 精準地找出只有"net"的字串;而像"network"這種的就會被排除在外。

沒有留言:

張貼留言