Linux中強大且常用命令 find grep

2021-07-22 09:29:48 字數 4375 閱讀 8588

在linux下面工作,有些命令能夠大大提高效率。本文就向大家介紹find、grep命令,他哥倆可以算是必會的linux命令,我幾乎每天都要用到他們。本文結構如下:

grep命令

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

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

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

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

find [path...] [expression]

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

find start_directory

options

criteria_to_match

action_to_perform_on_results

在使用find命令的-exec選項處理匹配到的檔案時, find命令將所有匹配到的檔案一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令執行幾分鐘之後,就會出現溢位錯誤。錯誤資訊通常是「引數列太長」或「引數列溢位」。這就是xargs命令的用處所在,特別是與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可以使使用者對所匹配到的檔案執行幾乎所有的命令。

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

grep [options] pattern [file...] 

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

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

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

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

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

*  匹配零個或多個先前字元 如:' *grep'匹配所有乙個或多個空格後緊跟grep的行。 .*一起用代表任意字元。

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

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

\(..\)  標記匹配字元,如:'\(love\)',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這個單詞,兩邊均為空格。

同時顯示匹配行上下的?行,如: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 的行。

——藉此感謝在實習公司同事們給與的幫助,

特別是jay、jeff。

linux中強大且常用命令 find grep

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

linux中強大且常用命令 find grep

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

linux中強大且常用命令 find grep

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