查詢命令find 和grep

2021-04-21 19:32:59 字數 2571 閱讀 2744

一般來說,find 是指查詢檔案,以檔名為依據,當然也可以指目錄,而grep是查詢字串,以查詢內容為主。當然二者還可以混合使用。

find  格式

find [path] [options] [tests] [actions]

幾個簡單例子

find . -name test.txt -print

find / -type d test

find . -name "test*"

find /bin /usr/bin -name test

可以看出來,路徑可以是絕對路徑,也可以是相對路徑,同時也可以是多個路徑,選項一般使用的比較少,測試就是這裡所用的-name, -type 等,action一般是print,預設的就是列印出來,也可以使用其他的ls, -exec 等

更具體的引數:

主要的一些選項如下:

-depth    在檢視目錄本身以前要先搜尋目錄中的內容

-follow    跟隨符號鏈結

-maxdepths n    在搜尋乙個目錄時至多搜尋n層

-mount(或-xdev)    不要搜尋其他的檔案系統

主要的一些測試專案如下:

-atime n    n天以前訪問的檔案

-mtime n    n天以前修改的檔案

-name pattern    除了路徑,與指定的型別匹配的檔名.為了保證指定的型別傳遞給find命令而並不是立即被shell賦值,指定的型別必須用引號進行引用.用引號的時候,可以用匹配,也就是檔名模糊查詢,否則認為是檔名精確查詢

-newer otherfile    與otherfile檔案相比要新的檔案

-type c        c型別的檔案,而這裡的c可以指定的一種型別.最常用的是d代表目錄,而f是指普通的檔案.對於其他的檔案型別,我們可以檢視手冊頁.

-user username    指定的使用者所擁有的檔案

我們也可以使用運算子進行測試的組合.大多數的有兩種格式:短格式和長格式.

!    -not    測試的反

-a    -and    所有的測試必須為真

-o    -or    測試中某乙個為真

主要的一些動作為:

-exec command    執行乙個命令.這是我們最常執行的動作.

-ok command    與-exec相類似,所不同的只是他會提示使用者在執行將要執行的命令之前進行命令的確認.

-print        列印出檔名

-ls        使用ls命令列出當前的檔案

-exec和-ok命令會同一行的引數子串行作為他的引數的一部分,直到遇到乙個終結符/;序列.對於-exec和-ok來說字串{}是珍上特殊的型別,而且會為當前檔案的絕對路徑所替換.

乙個例子

find . -newer while2 -type f -exec ls -l {} /;

查詢當前路徑下,比while2要新的,並且是常規得檔案,並按ls -l列出來

注意乙個發現,-name 會遞迴到子目錄,如果不想查詢子目錄,可以限定查詢的深度加選項-maxdepths 1表示只在當前目錄,不到子目錄下找。

但是不知為什麼,我測試的-newer只適用於當前目錄,不進行子目錄查詢

grep

grep [options] pattern [files]

grep 用於查詢檔案中的字串,功能非常強大,也可以和find合用,作為-exec得命令

常用例子

grep abc ./* 在當前路徑下查詢所有檔案中含abc字串的檔案,並把行列印出來

選項主要有:

-c    列印出匹配行的總數,而不是列印出匹配的行

-e    開啟擴充套件表示式

-h    禁止將在其中查詢到匹配內容的檔名作為輸出行的字首

-i    忽略大小寫

-l    列出帶用匹配行的檔名,而不是輸出實際的匹配行

-v    將匹配型別轉換為選擇不匹配的行而不是匹配的行

更複雜的匹配就要使用正規表示式

正規表示式中的一些特殊字元

^    在一行的開頭

$    在一行的結尾

.    任意乙個單一字元

方括號中所包含是字母的範圍,其中的任何乙個都可以進行匹配,例如a-e的字母範圍,或者是我們可以使用^來進行反義.

如果我們要將他們作為普通的字元來使用就要在這些字元前面加上/.所以如果我們要查詢乙個$字元,我們就要使用/$來進行查詢.

還有一些擴充套件的匹配

?    可選的匹配,但是最多匹配一次

*    必須匹配0個或是多個專案

+    必須匹配1個或是多個專案

必須匹配n次

必須匹配n次或是更多次

匹配範圍為n次到m次,包括m次

例子:grep e$ test.txt

搜尋以e結尾的匹配行

grep-e [a-z]/ words2.txt

搜尋查詢10個字元長的小寫字母的單詞

更複雜的以後慢慢使用中了解

參考http://www.yuanma.org/data/2007/1121/article_2895.htm

find和grep命令例項

find命令語法 find path.expression find命令引數 print exec ok 詳細解釋參考鏈結1和鏈結2 find命令選項 name perm prune user group mtime n n nogroup nouser newer file1 file2 type...

查詢的命令主要有find和grep

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

linux的grep和find命令

在linux下面工作,有些命令能夠大大提高效率。本文就向大家介紹find grep命令,他哥倆可以算是必會的linux命令,我幾乎每天都要用到他們。本文結構如下 grep命令 find命令是乙個無處不在命令,是linux中最有用的命令之一。find命令用於 在乙個目錄 及子目錄 中搜尋檔案,你可以指...