find和grep的區別及用法

2021-09-26 20:33:26 字數 4696 閱讀 1962

1、find命令

find命令是乙個無處不在命令,是linux中最有用的命令之一。find命令用於:在乙個目錄(及子目錄)中搜尋檔案,你可以指定一些匹配條件,如按檔名、檔案型別、使用者甚至是時間戳查詢檔案。下面就通過例項來體驗下find命令的強大。

1.1、find命令的一般形式

man文件中給出的find命令的一般形式為:

find [-h] [-l] [-p] [-d debugopts] [-olevel] [path…] [expression]

其實[-h] [-l] [-p] [-d debugopts] [-olevel]這幾個選項並不常用(至少在我的日常工作中,沒有用到過),上面的find命令的常用形式可以簡化為:

find [path…] [expression]

path:find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄

expression:expression可以分為——「-options [-print -exec -ok …]」

-options,指定find命令的常用選項,下節詳細介紹

-print,find命令將匹配的檔案輸出到標準輸出

-exec,find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為』command』 ;,注意和\;之間的空格

find ./ -size 0 -exec rm {} ; 刪除檔案大小為零的檔案 (還可以以這樣做:rm -ifind ./ -size 0或 find ./ -size 0 | xargs rm -f &)

為了用ls -l命令列出所匹配到的檔案,可以把ls -l命令放在find命令的-exec選項中:find . -type f -exec ls -l ;

在/logs目錄中查詢更改時間在5日以前的檔案並刪除它們:find /logs -type f -mtime +5 -exec rm ;

-ok,和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在執行每乙個命令之前,都會給出提示,讓使用者來確定是否執行。

find . -name 「*.conf」 -mtime +5 -ok rm ; 在當前目錄中查詢所有檔名以.log結尾、更改時間在5日以上的檔案,並刪除它們,只不過在刪除之前先給出提示

也有人這樣總結find命令的結構:

find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。

在有些系統中,使用-exec選項會為處理每乙個匹配到的檔案而發起乙個相應的程序,並非將匹配到的檔案全部作為引數一次執行;這樣在有些情況下就會出現程序過多,系統效能下降的問題,因而效率不高;

而使用xargs命令則只有乙個程序。另外,在使用xargs命令時,究竟是一次獲取所有的引數,還是分批取得引數,以及每一次獲取引數的數目都會根據該命令的選項及系統核心中相應的可調引數來確定。

來看看xargs命令是如何同find命令一起使用的,並給出一些例子。

find . -type f -print | xargs file 查詢系統中的每乙個普通檔案,然後使用xargs命令來測試它們分別屬於哪類檔案

find / -name 「core」 -print | xargs echo 「」 >/tmp/core.log 在整個系統中查詢記憶體資訊轉儲檔案(core dump) ,然後把結果儲存到/tmp/core.log 檔案中:

find . -type f -print | xargs grep 「hostname」 用grep命令在所有的普通檔案中搜尋hostname這個詞

find ./ -mtime +3 -print|xargs rm -f –r 刪除3天以前的所有東西(find . -ctime +3 -exec rm -rf {} ;)

find ./ -size 0 | xargs rm -f & 刪除檔案大小為零的檔案

find命令配合使用exec和xargs可以使使用者對所匹配到的檔案執行幾乎所有的命令。

2、grep命令

grep (global search regular expression_r(re) and print out the line,全面搜尋正規表示式並把行列印出來)是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。

2.1、grep命令的一般選項及例項

grep [options] pattern [file…]

grep [options] [-e pattern | -f file] [file…]

grep命令用於搜尋由pattern引數指定的模式,並將每個匹配的行寫入標準輸出中。這些模式是具有限定的正規表示式,它們使用ed或egrep命令樣式。如果在file引數中指定了多個名稱,grep命令將顯示包含匹配行的檔案的名稱。對 shell 有特殊含義的字元 ($, *, [, |, ^, (, ), \ ) 出現在 pattern引數中時必須帶雙引號。如果 pattern引數不是簡單字串,通常必須用單引號將整個模式括起來。在諸如 [a-z], 之類的表示式中,-(減號)cml 可根據當前正在整理的序列來指定乙個範圍。整理序列可以定義等價的類以供在字元範圍中使用。如果未指定任何檔案,grep會假定為標準輸入。

2.2、grep正規表示式元字符集(基本集)

^ 錨定行的開始 如:』^grep』匹配所有以grep開頭的行。

$ 錨定行的結束 如:'grep$'匹配所有以grep結尾的行。

. 匹配乙個非換行符的字元如:'gr.p』匹配gr後接乙個任意字元,然後是p。

匹配乙個指定範圍內的字元,如』[gg]rep』匹配grep和grep。

[^] 匹配乙個不在指定範圍內的字元,如:』[^a-fh-z]rep』匹配不包含a-r和t-z的乙個字母開頭,緊跟rep的行。

… 標記匹配字元,如:『lovelove』,love被標記為1。

< 錨定單詞的開始,如:』> 錨定單詞的結束,如』grep>'匹配包含以grep結尾的單詞的行。

x 連續重複字元x,m次,如:'o'匹配包含連續5個o的行。

x 連續重複字元x,至少m次,如:'o'匹配至少連續有5個o的行。

x 連續重複字元x,至少m次,不多於n次,如:'o'匹配連續5–10個o的行。

\w 匹配乙個文字和數字字元,也就是[a-za-z0-9],如:'g\w*p』匹配以g後跟零個或多個文字或數字字元,然後是p。

\w w的反置形式,匹配乙個非單詞字元,如點號句號等。\w*則可匹配多個。

\b 單詞鎖定符,如: '\bgrep\b』只匹配grep,即只能是grep這個單詞,兩邊均為空格。

2.3、grep命令的常用選項及例項

-?同時顯示匹配行上下的?行,如:grep -2 pattern filename同時顯示匹配行的上下2行。

-b,–byte-offset

列印匹配行前面列印該行所在的塊號碼。

-c,–count

只列印匹配的行數,不顯示匹配的內容。

-f file,–file=file

從檔案中提取模板。空檔案中包含0個模板,所以什麼都不匹配。

-h,–no-filename

當搜尋多個檔案時,不顯示匹配檔名字首。

-i,–ignore-case

忽略大小寫差別。

-q,–quiet

取消顯示,只返回退出狀態。0則表示找到了匹配的行。

-l,–files-with-matches

列印匹配模板的檔案清單。

-l,–files-without-match

列印不匹配模板的檔案清單。

-n,–line-number

在匹配的行前面列印行號。

-s,–silent

不顯示關於不存在或者無法讀取檔案的錯誤資訊。

-v,–revert-match

反檢索,只顯示不匹配的行。

-w,–word-regexp

如果被《和》引用,就把表示式做為乙個單詞搜尋。

-v,–version

顯示軟體版本資訊。

ls -l | grep 『^a』 通過管道過濾ls -l輸出的內容,只顯示以a開頭的行。

grep 『test』 d* 顯示所有以d開頭的檔案中包含test的行。

grep 『test』 aa bb cc 顯示在aa,bb,cc檔案中匹配test的行。

grep 『[a-z]』 aa 顯示所有包含每個字串至少有5個連續小寫字元的字串的行。

grep 'w(es)t.』 aa 如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.),這些字元後面緊跟著另外乙個es(),找到就顯示該行。如果用egrep或grep -e,就不用""號進行轉義,直接寫成』w(es)t.*'就可以了。

grep -i pattern files :不區分大小寫地搜尋。預設情況區分大小寫

grep -l pattern files :只列出匹配的檔名,

grep -l pattern files :列出不匹配的檔名,

grep -w pattern files :只匹配整個單詞,而不是字串的一部分(如匹配『magic』,而不是『magical』),

grep -c number pattern files :匹配的上下文分別顯示[number]行,

grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,

grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。

find與grep的用法和區別

find 相當於windows中的搜尋,用來搜尋檔案 grep 用來搜尋文字,搜尋檔案內部中的文字內容語法 格式 find path options 操作的expression path 預設的是當前目錄,在當前目錄下查詢檔案 options 選項,是指 搜尋條件 expression 搜尋表示式 ...

linux下find和grep的區別

在使用linux時,經常需要進行檔案查詢。其中查詢的命令主要有find和grep。兩個命令是有區的。區別 1 find命令是根據檔案的屬性進行查詢,如檔名,檔案大小,所有者,所屬組,是否為空,訪問時間,修改時間等。2 grep是根據檔案的內容進行查詢,會對檔案的每一行按照給定的模式 patter 進...

grep與find命令的區別

grep與find命令的區別 grep搜尋的是文字,find搜尋的是檔案,換句話說就是grep是查詢匹配條件的行,find是搜尋匹配條件的檔案。grep文字搜尋 過濾 用法 grep 引數 搜尋字串通常與管道命令一起用搜尋某個檔案的某個字元 引數 i不區分大小寫 v反向搜尋,顯示不是搜尋字串的行 c...