Shell find和grep命令的區別(超詳細)

2020-07-16 10:04:35
find 和 grep 同樣都是搜尋命令,兩者有什麼區別呢?

find命令

find 命令用於在系統中搜尋符合條件的檔名,如果需要模糊査詢,則使用萬用字元進行匹配。搜尋時檔名是完全匹配的。

完全匹配是什麼意思呢?舉個例子:

[[email protected] ~]# touch abc
#建立檔案abc
[[email protected] ~]# touch abcd
#建立檔案abed
[[email protected] ~]# find. -name "abc"
./abc
#搜尋檔名是abc的檔案,只會找到abc檔案,而不會找到abcd檔案
#雖然abcd檔名中包含abc,但是find是完全匹配的,只有和要搜尋的資料完全一樣,才能找到

完全匹配的意思就是:搜尋的內容必須和原始檔案一模一樣,才能被搜尋到。

如果想要找到 abcd 檔案,就必須依靠萬用字元,如 find.-name"abc*"。

注意,find 命令是可以通過 -regex 選項識別正規表示式規則的,也就是說,find 命令可以按照正規表示式規則匹配,而正規表示式是模糊匹配。但是對初學者而言,find 和 grep 命令本身就不好理解,所以在這裡只按照萬用字元規則來進行 find 查詢。

grep命令

grep 命令用於在檔案中搜尋符合條件的字串,如果需要模糊査詢,則使用正規表示式進行匹配。搜尋時字串是包含匹配的。

grep 命令和 find 命令不一樣,使用 grep 命令在檔案中査找符合條件的字串時,只要搜尋的內容包含在資料行中,就會列出整行內容。舉個例子:

[[email protected] ~]# echo abc > test
#在test檔案中寫入abc資料
[[email protected] ~]# echo abed >> test
#在test檔案中追加abcd資料
[[email protected] ~]# grep "abc" test
abc
abcd
#grep命令査找時,只要資料行中包含abc,就會列出
#所以abc和abcd都可以查詢到

通過這兩個例子,大家就可以知道完全匹配和包含匹配的區別了。