find與grep的用法和區別

2021-10-11 21:30:13 字數 3732 閱讀 8553

find:相當於windows中的搜尋,用來搜尋檔案

grep:用來搜尋文字,搜尋檔案內部中的文字內容

語法:

格式: find [path] [-options] [操作的expression]

path 預設的是當前目錄, 在當前目錄下查詢檔案

-options 選項,是指 搜尋條件

expression 搜尋表示式

1.按照檔名查詢

find / -name httpd.conf  #在根目錄下查詢檔案httpd.conf,表示在整個硬碟查詢

find /etc -name '*srm*'  #使用萬用字元*(0或者任意多個)。表示在/etc目錄下查詢檔案名中含有字串『srm』的檔案

find . -name 'srm*'   #表示當前目錄下查詢檔案名開頭是字串『srm』的檔案

2.按照檔案特徵查詢

find / -amin -10    # 查詢在系統中最後10分鐘訪問的檔案

find / -atime -2   # 查詢在系統中最後48小時訪問的檔案

find / -empty    # 查詢在系統中為空的檔案或者資料夾

find / -mmin -5    # 查詢在系統中最後5分鐘裡修改過的檔案

find / -user fred   #查詢在系統中屬於fred這個使用者的檔案

find ./ -size -2m #根據檔案大小查詢,查詢大小等於2m的檔案

find ./ -size +2m -size -5m #根據檔案大小查詢,查詢大小在2m到5m範圍的檔案

3.使用混合查詢方式查詢檔案

find /tmp -size +10000c -and -mtime +2   #在/tmp目錄下查詢大於10000位元組並在最後2分鐘內修改的檔案

find / -user fred -or -user george   #在/目錄下查詢使用者是fred或者george的檔案檔案

find /tmp ! -user panda   #在/tmp目錄中查詢所有不屬於panda使用者的檔案

語法:

grep [-abcefghhillnqrsvvwxy][-a《顯示列數》][-b《顯示列數》][-c《顯示列數》][-d《進行動作》][-e《範本樣式》][-f《範本檔案》][--help][範本樣式][檔案或目錄...]

常用選項:

-a 或 --text : 不要忽略二進位制的資料。

-a《顯示行數》 或 --after-context=《顯示行數》 : 除了顯示符合範本樣式的那一列之外,並顯示該行之後的內容。

-b 或 --byte-offset : 在顯示符合樣式的那一行之前,標示出該行第乙個字元的編號。

-b《顯示行數》 或 --before-context=《顯示行數》 : 除了顯示符合樣式的那一行之外,並顯示該行之前的內容。

-c 或 --count : 計算符合樣式的列數。

-c《顯示行數》 或 --context=《顯示行數》或-《顯示行數》 : 除了顯示符合樣式的那一行之外,並顯示該行之前後的內容。

-d 《動作》 或 --directories=《動作》 : 當指定要查詢的是目錄而非檔案時,必須使用這項引數,否則grep指令將回報資訊並停止動作。

-e《範本樣式》 或 --regexp=《範本樣式》 : 指定字串做為查詢檔案內容的樣式。

-e 或 --extended-regexp : 將樣式為延伸的正規表示式來使用。

-f《規則檔案》 或 --file=《規則檔案》 : 指定規則檔案,其內容含有乙個或多個規則樣式,讓grep查詢符合規則條件的檔案內容,格式為每行乙個規則樣式。

-f 或 --fixed-regexp : 將樣式視為固定字串的列表。

-g 或 --basic-regexp : 將樣式視為普通的表示法來使用。

-h 或 --no-filename : 在顯示符合樣式的那一行之前,不標示該行所屬的檔名稱。

-h 或 --with-filename : 在顯示符合樣式的那一行之前,表示該行所屬的檔名稱。

-i 或 --ignore-case : 忽略字元大小寫的差別。

-l 或 --file-with-matches : 列出檔案內容符合指定的樣式的檔名稱。

-l 或 --files-without-match : 列出檔案內容不符合指定的樣式的檔名稱。

-n 或 --line-number : 在顯示符合樣式的那一行之前,標示出該行的列數編號。

-o 或 --only-matching : 只顯示匹配pattern 部分。

-q 或 --quiet或--silent : 不顯示任何資訊。

-r 或 --recursive : 此引數的效果和指定"-d recurse"引數相同。

-s 或 --no-messages : 不顯示錯誤資訊。

-v 或 --invert-match : 顯示不包含匹配文字的所有行。

-v 或 --version : 顯示版本資訊。

-w 或 --word-regexp : 只顯示全字符合的列。

-x --line-regexp : 只顯示全列符合的列。

-y : 此引數的效果和指定"-i"引數相同。

例項: grep "被查詢的字串" 檔名 從檔案內容查詢匹配指定字串的行

grep –e "正規表示式" 檔名 從檔案內容查詢與正規表示式匹配的行

grep –i "被查詢的字串" 檔名 查詢時不區分大小寫

grep –v "被查詢的字串" 檔名 從檔案內容查詢不匹配指定字串的行

find / -type f -name "*.log" | xargs grep "error" 從根目錄開始查詢所有擴充套件名為 .log 的文字檔案,並找出包含 "error" 的行

find . -name "*.in" | xargs grep "thermcontact" 從當前目錄開始查詢所有擴充套件名為 .in 的文字檔案,並找出包含 "thermcontact" 的行

擴充套件grep(grep -e 或者 egrep):

egrep 'nw|ea' testfile

列印所有包含nw或ea的行。如果不是使用egrep,而是grep,將不會有結果查出。

# 基本正規表示式 

一、匹配字元

. :任意乙個字元。

[abc] :表示匹配乙個字元,這個字元必須是abc中的乙個。

[a-za-z] :表示匹配乙個字元,這個字元必須是a-z或a-z這52個字母中的乙個。

[^123] :匹配乙個字元,這個字元是除了1、2、3以外的所有字元。

對於一些常用的字符集,系統做了定義:

[a-za-z] 等價於 [[:alpha:]]

[0-9] 等價於 [[:digit:]]

[a-za-z0-9] 等價於 [[:alnum:]]

tab,space 等空白字元 [[:space:]]

[a-z] 等價於 [[:upper:]]

[a-z] 等價於 [[:lower:]]

二、匹配次數:

\ :匹配其前面出現的字元至少m次,至多n次。

\? :匹配其前面出現的內容0次或1次,等價於\。

* :匹配其前面出現的內容任意次,等價於\,所以 ".*" 表述任意字元任意次,即無論什麼內容全部匹配

grep "/.*sh" /etc

grep "/.\sh" /etc

find和grep的區別及用法

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

grep與find命令的區別

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

linux下find和grep的區別

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