find
??find命令主要用來(lái)在指定的路徑下查找指定的文件。
基礎(chǔ)語(yǔ)法
find [路徑] [參數(shù)] [操作]
詳細(xì)的參數(shù)說(shuō)明如下所示:
- 路徑:find命令查找的目錄路徑,如 . 表示當(dāng)前目錄,/ 表示系統(tǒng)根目錄
- 參數(shù):指定上的查找條件,如:可以按照文件更改時(shí)間、文件類(lèi)型等條件查找
- 操作:用于指定結(jié)果的輸出方式
find命令常用參數(shù)及其含義如下:
| 參數(shù) | 含義 |
|---|---|
| -name | 按文件名查找文件 |
| -perm | 按文件權(quán)限查找文件 |
| -depth | 查找文件時(shí),首先查找當(dāng)前目錄中的文件,然后在其子目錄中查找 |
| -prune | 使用該參數(shù)進(jìn),可以使find命令不在當(dāng)前指定的目錄中查找,如果同時(shí)使用-depth參數(shù),則-prune將被find命令忽略 |
| -user | 根據(jù)文件屬主查找文件 |
| -group | 根據(jù)文件所屬的用戶組查找 |
| -mtime -n +n | 根據(jù)文件的更改時(shí)間查找文件,-n 表示文件更改時(shí)間距離現(xiàn)在在n天以內(nèi),+n表示文件更改時(shí)間距離現(xiàn)在在n天之前 |
| -nogroup | 查找無(wú)有效屬組的文件,即該文件所屬的組在/etc/groups中不存在 |
| -nouser | 查找無(wú)有效屬主的文件,即該文件的屬主在/ect/passwd中不存在 |
| -newer file1 ! file2 | 查找更改時(shí)間比文件file1新但比f(wàn)ile2舊的文件 |
| -type | 查找某一類(lèi)型的文件,type后的子參數(shù)及其意義如下: b:塊設(shè)備文件 d:目錄 c:字符設(shè)備文件 p:管道文件 l:符號(hào)鏈接文件 f:普通文件 |
| -size n:[c] | 查找文件長(zhǎng)度為n塊的文件,帶有c時(shí)表示文件長(zhǎng)度以字節(jié)計(jì) |
find命令操作名稱及其意義如下所示:
| 操作名稱 | 含義 |
|---|---|
| 將匹配的文件輸出到標(biāo)準(zhǔn)輸出 | |
| -exec | 對(duì)匹配的文件執(zhí)行該參數(shù)所給出的Shell命令。相應(yīng)命令的形式為'command' { } ;。注意{ }和;之間的空格 |
| -ok | 和-exec作用相同,只不過(guò)以一種更安全的模式來(lái)執(zhí)行該參數(shù)所給出的Shell命令,在執(zhí)行每一個(gè)命令之前,都給出提示,讓用戶來(lái)確定是否執(zhí)行 |
示例
-
1、根據(jù)文件名進(jìn)行查找文件,并將匹配到文件輸出到標(biāo)準(zhǔn)輸出
23-1 find-name示例_c2i.jpg -
2、查找更改時(shí)間在距今3天以內(nèi)的文件和距今3天之前的文件
23-2 find-mtime示例_c2i.jpg -
3、查找對(duì)應(yīng)的文件,并顯示每個(gè)文件對(duì)應(yīng)的行數(shù)
23-3 find-exec示例_c2i.jpg -
4、查找對(duì)應(yīng)的文件,在執(zhí)行刪除文件逐個(gè)進(jìn)行確認(rèn)
23-4 find-ok示例_c2i.jpg
grep
??grep是(Global search Regular Expression and Print out the line)的簡(jiǎn)稱,即全面搜索正則表達(dá)式并打印行,該命令是Linux中的一種非常強(qiáng)大的文本搜索工具,它可以根據(jù)指定的字符串,對(duì)文件的每一行進(jìn)行搜索,如果找到該字符串,則輸出該行的內(nèi)容。
基礎(chǔ)語(yǔ)法
grep [參數(shù)] 需要查找的字符串 文件名
主要參數(shù)如下所示:
| 參數(shù) | 功能 |
|---|---|
| -A NUM | 除了顯示符合條件的行外,同時(shí)顯示每個(gè)符合條件行的后NUM行 |
| -B NUM | 除了顯示符合條件的行外,同時(shí)顯示每個(gè)符合條件行的前NUM行,與-A相反 |
| -c | 只顯示符合條件的行數(shù),而不顯示每行的具體信息 |
| -i | 搜索時(shí)忽略大小寫(xiě) |
| -h | 搜索多個(gè)文件時(shí)不顯示文件名 |
| -l | 只顯示符合匹配的文件名,而不顯示具體的匹配行 |
| -n | 顯示所有匹配的行,并顯示行號(hào) |
| -s | 不顯示不存在或無(wú)匹配文本的錯(cuò)誤信息 |
| -v | 顯示不包含匹配文本的所有行 |
| -w | 匹配整詞 |
| -x | 匹配整行 |
| -r | 遞歸搜索,不僅搜索當(dāng)前目錄,也搜索子目錄 |
| -q | 不輸出任何結(jié)果,以退出狀態(tài)表示搜索是否成功 |
| -b | 打印匹配行距離文件頭部的偏移量,以字節(jié)為單位 |
| -o | 與-b結(jié)合使用,打印匹配的詞距離文件頭部的偏移量,以字節(jié)為單位 |
| -E | 支持?jǐn)U展的正則表達(dá)式 |
grep命令中的需要查找的字符串十分靈活,可以是字符串,也可以是變量,還可以是正則表達(dá)式。需要注意的是,無(wú)論是體積形式,只要包含空格,就需要使用雙引號(hào)將其引起來(lái),如果不加雙引號(hào),空格后的字符串會(huì)被認(rèn)為為是文件名。
常規(guī)示例
-
1、搜索的字符串包含空格時(shí),是否使用雙引號(hào)的區(qū)別
23-5 grep示例-1_c2i.jpg
從上面可以看出,如果搜索的字符串包含空格時(shí),會(huì)產(chǎn)生錯(cuò)誤,在Linux中默認(rèn)參數(shù)時(shí)以空格做為分隔
-
2、多文件查詢
23-6 grep示例-2_c2i.jpg
-
3、使用通配符查詢
23-7 grep示例-2_c2i.jpg -
4、-c參數(shù)詳解
??-c參數(shù)表示輸出匹配字符串行的數(shù)量,默認(rèn)情況下,grep命令打印包含搜索字符串的所有行,而加上-c參數(shù)后,就只顯示包含搜索字符串行的數(shù)量,如下所示:
23-8 grep-c參數(shù)_c2i.jpg -
5、-n參數(shù)詳解
??-n參數(shù)顯示所有匹配的行,并顯示行號(hào)。默認(rèn)情況下,grep搜索單個(gè)文件時(shí),只顯示每行的內(nèi)容,搜索多個(gè)文件時(shí),顯示文件名及每行的內(nèi)容,如果加-n參數(shù)后,將在匹配的行前面顯示行號(hào),如下所示:
23-9 grep-n參數(shù)_c2i.jpg -
6、-v參數(shù)詳解
??-v參數(shù)顯示不包括匹配文本的所有行,即將搜索到的匹配行排除在外。
23-10 grep-v參數(shù)_c2i.jpg -
7、-i參數(shù)詳解
??在Linux系統(tǒng)中,對(duì)大小寫(xiě)是敏感的,而grep也不例外。參數(shù)-i則表示在搜索時(shí)忽略大小寫(xiě),如下所示:
23-11 grep-i參數(shù)_c2i.jpg -
8、-h參數(shù)詳解
??-h參數(shù)表示搜索多文件時(shí)不顯示文件名。而在默認(rèn)情況下,grep命令查詢多個(gè)文件時(shí),會(huì)在匹配行的前面顯示文件名,而-h參數(shù)的主要作用就是不在顯示文件名,如下所示:
23-12 grep-h參數(shù)_c2i.jpg -
9、-l參數(shù)詳解
??-l表示只顯示搜索到的匹配項(xiàng)的文件名,而不顯示具體的匹配行,如下所示:
23-13 grep-l參數(shù)_c2i.jpg -
10、-s參數(shù)詳解
??-s參數(shù)表示不顯示不存在或無(wú)法匹配到的文本錯(cuò)誤信息。在默認(rèn)情況下,當(dāng)grep在搜索中出現(xiàn)不存在或無(wú)法匹配時(shí)將打印錯(cuò)誤信息,如下所示:
23-14 grep-s參數(shù)_c2i.jpg -
11、-r參數(shù)詳解
??默認(rèn)情況下,grep命令只搜索當(dāng)前目錄下的文件,而不對(duì)子目錄的文件進(jìn)行搜索。使用-r參數(shù)后,則搜索當(dāng)前目錄和子目錄,如下所示:
23-15 grep-r參數(shù)_c2i.jpg -
12、-w和-x參數(shù)
??grep命令是支持正則表達(dá)式的。正則表達(dá)式中的元字符會(huì)被解釋為特殊的含義。-w表示匹配整個(gè)搜索字符串,即以字面的含義去解析它。-x則是匹配整行,即只有文件中有整行內(nèi)容和搜索字符串匹配,才會(huì)顯示出來(lái)。詳細(xì)示例如下:
23-16 grep-w-x參數(shù)_c2i.jpg 13、-q參數(shù)詳解
??從上面可知,grep命令默認(rèn)情況下是輸出結(jié)果的。如果只是想知道有沒(méi)有匹配成功,則使用-q參數(shù)即可。
| 退出狀態(tài) | 詳細(xì)含義 |
|---|---|
| 0 | 匹配成功 |
| 1 | 未搜索到匹配的文本行 |
| 2 | 命令或程序存在錯(cuò)誤而未執(zhí)行 |

echo $? 用于顯示上一條命令退出狀態(tài)
正則表達(dá)式示例
-
1、匹配行首
23-18 正則表達(dá)式行首_c2i.jpg -
2、設(shè)置大小寫(xiě)
23-19 正則表達(dá)式大小寫(xiě)_c2i.jpg -
3、匹配重復(fù)字符
23-20 正則表達(dá)式重復(fù)項(xiàng)_c2i.jpg
-
4、匹配轉(zhuǎn)義符
23-21 正則表達(dá)式轉(zhuǎn)義符_c2i.jpg -
5、POSIX字符類(lèi)
23-22 grep-POSIX字符類(lèi)_c2i.jpg -
6、精確匹配
23-23 正則表達(dá)式精確匹配_c2i.jpg -
7、或字符"|"是擴(kuò)展的正則表達(dá)式中定義的,因此grep在使用時(shí)需要加上-E選項(xiàng)才能支持,示例如下所示:
23-24 正則表達(dá)式或字符_c2i.jpg
??grep和正則表達(dá)式結(jié)合起來(lái),加以靈活使用,功能十分強(qiáng)大,大家可根據(jù)實(shí)際情況多使用。






















