Linux命令學(xué)習(xí)手冊-grep

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

功能

grep 是一種強(qiáng)大的文本搜索工具攒盈,它能使用正則表達(dá)式搜索(指定文件中的)文本,并把匹配的行打印出來。

舉例

顯示測試文件 testFile 的內(nèi)容

$cat testFile

輸入之后,輸出如下:

hello, this is a file
this file used for test the
command of grep.
do you know?
yes yeeeeeees i knooooooww!
the west is
what is ves?
this is a world
which is tes good.
west tes
westeses
westeseses
west tesves

這就是我們要測試的文件的內(nèi)容。

在當(dāng)前目錄及子目錄所有文件中查找字符串 test

$grep -r 'test' *

輸入之后,輸出如下:

good/test2:this is a test for the
good/test2:test the string.
test2:grep test for
test2:used to test the
test3:grep test for
test3:used to test the
testFile:this file used for test the

這個(gè)應(yīng)該是最常使用的命令了。 -r 選項(xiàng)的意思就是遞歸搜索子目錄的意思。

查找 test 并給結(jié)果中匹配的字符串加上顏色

$grep --color 'test' *

這樣绊序,會把輸出結(jié)果中的所有匹配的 test 字符串標(biāo)上顏色。

要在當(dāng)前目錄下所有 .doc 文件中查找字符串 sort

$grep "sort" *.doc

顯示匹配得行數(shù)

$grep -c "we" testFile

輸入之后秽荞,輸出如下:

5

這樣骤公,顯示匹配 we 的行的數(shù)目。

顯示含有 we 字符的行扬跋,并打印行號

$grep -n "we" testFile

輸入之后阶捆,輸出如下:

6:the west is
10:west tes
11:westeses
12:westeseses
13:west tesves

這樣,會在輸出的結(jié)果的最左側(cè)打印匹配的行號胁住。

顯示不匹配 we 的行

$grep -v "we" testFile

輸入之后趁猴,輸出如下:

hello, this is a file
this file used for test the
command of grep.
do you know?
yes yeeeeeees i knooooooww!
what is ves?
this is a world
which is tes good.

這里 -v 選項(xiàng)表示顯示不匹配 we 的行。

忽略大小寫的匹配

$ls |grep -i 'file'

輸入之后彪见,輸出如下:

testFile

這樣儡司,添加了 -i 選項(xiàng),匹配 file 的時(shí)候余指,不會區(qū)分大小寫捕犬。

范圍的匹配

$grep 'h[ae]' testFile

輸入之后跷坝,輸出如下:

hello, this is a file
this file used for test the
the west is
what is ves?

這里匹配的或者是 ha 或者是 he ,若使用 [a,e] 這樣也包括 ‘,’ 逗號了碉碉。

僅顯示包含 test 匹配的文件

$grep -l 'test' *

輸入之后柴钻,輸出如下:

test2
test3
testFile

這里, -l 選項(xiàng)僅列出含有匹配字符串的文件垢粮。

顯示 ls -l 輸出內(nèi)容中贴届,以 d 開頭的行

$ls -l | grep '^d'

$ls -l |grep ^d

輸入之后,輸出如下:

drwxr-xr-x 2 vaqeteart member 4096 Jul 12 18:44 good

這里蜡吧, good 是一個(gè)目錄毫蚓。

顯示 ls -l 輸出內(nèi)容中,不以 d 開頭的行

$ls -l |grep '^[^d]'

輸入之后昔善,輸出如下:

total 16
-rw-r--r-- 1 vaqeteart member    7 Jul 12 18:42 2
-rw-r--r-- 1 vaqeteart member  114 Jul 12 18:42 test2
-rw-r--r-- 1 vaqeteart member  212 Jul 12 19:01 testFile

這里元潘,利用 [^] 來指定不包含的字符。

顯示所有以 t 開頭的文件中包含 test 的行

$grep 'test' t*

輸入之后君仆,輸出如下:

test2:grep test for
test2:used to test the
testFile:this file used for test the

這里翩概,冒號左側(cè)是對應(yīng)行的文件名。

顯示在 testFile 返咱, test2 文件中匹配 test 的行

$grep 'test' testFile test2

$grep test testFile test2

輸入之后钥庇,輸出如下:

testFile:this file used for test the
test2:grep test for
test2:used to test the

為保險(xiǎn)期間,后面最好在搜索的時(shí)候加上''.

顯示 testFile 中有至少5個(gè)連續(xù)小寫字符的字符串的行

$grep '[a-z]\{5\}' testFile

輸入之后咖摹,輸出如下:

hello, this is a file
command of grep.
yes yeeeeeees i knooooooww!
this is a world
which is tes good.
westeses
westeseses
west tesves

顯示 testFile 中有開頭為5個(gè)連續(xù)小寫字符的字符串的行

$grep '^[a-z]\{5,\}' testFile

輸入之后上沐,輸出如下:

hello, this is a file
command of grep.
which is tes good.
westeses
westeseses

顯示 testFile 中含有以 th 為開始的單詞的行

$grep '\<th'

輸入之后,輸出如下:

hello, this is a file
this file used for test the
the west is
this is a world

這里楞艾,以 th 為開始的單詞有: thisthe

顯示 testFile 中含有以 st 結(jié)尾的單詞的行

$grep 'st\>' testFile

輸入之后龄广,輸出如下:

this file used for test the
the west is
west tes
west tesves

這里硫眯,以 st 結(jié)尾的單詞有 testwest

利用標(biāo)記的搜索

$ grep 'w\(es\)t t\1v\1' testFile

輸入之后择同,輸出如下:

west tesves

這里两入,根據(jù)正則表達(dá)式 \(\ 括號內(nèi)的內(nèi)容 es 匹配之后會被標(biāo)記為1,這樣以后可以用 \1 來代替 es 了敲才。這里相當(dāng)于搜索: grep 'west tesves' testFile 裹纳。如果用 egrepgrep -E ,就不用 \ 號進(jìn)行轉(zhuǎn)義可以直接用1這個(gè)標(biāo)號了紧武。

描述

grep 是一種強(qiáng)大的文本搜索工具剃氧,它能使用正則表達(dá)式搜索文本,并把匹配的行打印出來阻星。

Unixgrep 家族包括 grep 朋鞍、 egrepfgrepegrepfgrep 的命令只跟 grep 有很小不同。 egrepgrep 的擴(kuò)展滥酥,支持更多的 re 元字符更舞, fgrep 就是 fixed grepfast grep ,它們把所有的字母都看作單詞坎吻,也就是說缆蝉,正則表達(dá)式中的元字符表示回其自身的字面意義,不再特殊瘦真。

linux 使用 GNU 版本的 grep 刊头。它功能更強(qiáng),可以通過 -G 吗氏、 -E 芽偏、 -F 命令行選項(xiàng)來使用 egrepfgrep 的功能。

grep 的工作方式是這樣的弦讽,它在一個(gè)或多個(gè)文件中搜索字符串模板污尉。如果模板包括空格,則必須被引用往产,模板后的所有字符串被看作文件名被碗。搜索的結(jié)果被送到屏幕,不影響原文件內(nèi)容仿村。

grep 可用于 shell 腳本锐朴,因?yàn)?grep 通過返回一個(gè)狀態(tài)值來說明搜索的狀態(tài),如果模板搜索成功蔼囊,則返回 0 焚志,如果搜索不成功,則返回 1 畏鼓,如果文件不存在酱酬,則返回 2 。我們利用這些返回值就可進(jìn)行一些自動化的文本處理工作云矫。

grep 的一些選項(xiàng):

  • -?: 同時(shí)顯示匹配行上下的膳沽?行,如: grep -2 pattern filename 同時(shí)顯示匹配行的上下2行让禀。
  • -b挑社,--byte-offset: 打印匹配行前面打印該行所在的塊號碼。
  • -c,--count: 只打印匹配的行數(shù)巡揍,不顯示匹配的內(nèi)容痛阻。
  • -f File,--file=File: 從文件中提取模板吼肥÷计剑空文件中包含0個(gè)模板麻车,所以什么都不匹配。
  • -h斗这,--no-filename: 當(dāng)搜索多個(gè)文件時(shí)动猬,不顯示匹配文件名前綴。
  • -i表箭,--ignore-case: 忽略大小寫差別赁咙。
  • -q,--quiet: 取消顯示免钻,只返回退出狀態(tài)彼水。0則表示找到了匹配的行。
  • -l极舔,--files-with-matches: 打印匹配模板的文件清單凤覆。
  • -L,--files-without-match: 打印不匹配模板的文件清單拆魏。
  • -n盯桦,--line-number: 在匹配的行前面打印行號。
  • -s渤刃,--silent: 不顯示關(guān)于不存在或者無法讀取文件的錯(cuò)誤信息拥峦。
  • -v,--revert-match: 反檢索卖子,只顯示不匹配的行略号。
  • -w,--word-regexp: 如果被\<和\>引用洋闽,就把表達(dá)式做為一個(gè)單詞搜索玄柠。
  • -V,--version: 顯示軟件版本信息诫舅。

其它

用于 grep 正則表達(dá)式的元字符集(基本集)

  • ^: 錨定行的開始 如:'^grep'匹配所有以grep開頭的行随闪。
  • $: 錨定行的結(jié)束 如:'grep$'匹配所有以grep結(jié)尾的行。
  • .: 匹配一個(gè)非換行符的字符 如:'gr.p'匹配gr后接一個(gè)任意字符骚勘,然后是p。
  • *: 匹配零個(gè)或多個(gè)先前字符 如:'a*'匹配一個(gè)或多個(gè)a字符撮奏,'*grep'匹配一個(gè)或多個(gè)空格后緊跟grep俏讹。
  • .*: 代表任意字符。
  • []: 匹配一個(gè)指定范圍內(nèi)的字符畜吊,如'[Gg]rep'匹配Grep和grep泽疆。
  • [^]: 匹配一個(gè)不在指定范圍內(nèi)的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和H-Z范圍的一個(gè)字母開頭玲献,緊跟rep的行殉疼。
  • \(..\): 標(biāo)記匹配字符梯浪,如'(love)',love被標(biāo)記為1瓢娜,這樣如果同一表達(dá)式再引用love時(shí)挂洛,只需要利用\1即可。
  • \<: 錨定單詞的開始眠砾,如:'\>'
  • \>:: 錨定單詞的結(jié)束虏劲,如'grep\>'匹配包含以grep結(jié)尾的單詞的行。
  • x\{m\}: 重復(fù)字符x褒颈,m次柒巫,如:'o\{5\}'匹配包含5個(gè)o的行。
  • x\{m,\}: 重復(fù)字符x,至少m次谷丸,如:'o\{5,\}'匹配至少有5個(gè)o的行堡掏。
  • x\{m,n\}: 重復(fù)字符x,至少m次刨疼,不多于n次泉唁,如:'o\{5,10\}'匹配5–10個(gè)o的行。
  • \w:: 匹配文字和數(shù)字字符币狠,也就是[A-Za-z0-9]游两,如:'G\w*p'匹配以G后跟零個(gè)或多個(gè)文字或數(shù)字字符,然后是p漩绵。
  • \W: \w的反置形式贱案,匹配一個(gè)或多個(gè)非單詞字符,如點(diǎn)號句號等止吐。
  • \b: 單詞鎖定符宝踪,如: '\bgrepb\'只匹配grep。

用于 egrepgrep -E 的元字符擴(kuò)展集

  • +: 匹配一個(gè)或多個(gè)先前的字符碍扔。如:'[a-z]+able'瘩燥,匹配一個(gè)或多個(gè)小寫字母后跟able的串,如loveable,enable,disable等不同。
  • ?: 匹配零個(gè)或一個(gè)先前的字符厉膀。如:'gr?p'匹配g后跟一個(gè)或沒有r字符,然后是p的行二拐。
  • a|b|c: 匹配a或b或c服鹅。如:grep|sed匹配grep或sed
  • (): 分組符號,如:love(able|rs)ov+匹配loveable或lovers百新,匹配一個(gè)或多個(gè)ov企软。
  • x{m},x{m,},x{m,n}: 作用同x\{m\},x\{m,\},x\{m,n\}

POSIX字符類

為了在不同國家的字符編碼中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符類饭望,如"[:alnum:]"是A-Za-z0-9的另一個(gè)寫法仗哨。要把它們放到[]號內(nèi)才能成為正則表達(dá)式形庭,如[A- Za-z0-9]或[ [:alnum:] ]。在linux下的grep除fgrep外厌漂,都支持POSIX的字符類萨醒。

  • [:alnum:]: 文字?jǐn)?shù)字字符
  • [:alpha:]: 文字字符
  • [:digit:]: 數(shù)字字符
  • [:graph:]: 非空字符(非空格、控制字符)
  • [:lower:]: 小寫字符
  • [:cntrl:]: 控制字符
  • [:print:]: 非空字符(包括空格)
  • [:punct:]: 標(biāo)點(diǎn)符號
  • [:space:]: 所有空白字符(新行桩卵,空格验靡,制表符)
  • [:upper:]: 大寫字符
  • [:xdigit:]: 十六進(jìn)制數(shù)字(0-9,a-f雏节,A-F)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胜嗓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钩乍,更是在濱河造成了極大的恐慌辞州,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寥粹,死亡現(xiàn)場離奇詭異变过,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涝涤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門媚狰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阔拳,你說我怎么就攤上這事崭孤。” “怎么了糊肠?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵辨宠,是天一觀的道長。 經(jīng)常有香客問我货裹,道長嗤形,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任弧圆,我火速辦了婚禮赋兵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搔预。我一直安慰自己毡惜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布斯撮。 她就那樣靜靜地躺著,像睡著了一般扶叉。 火紅的嫁衣襯著肌膚如雪勿锅。 梳的紋絲不亂的頭發(fā)上帕膜,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音溢十,去河邊找鬼垮刹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛张弛,可吹牛的內(nèi)容都是我干的荒典。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼吞鸭,長吁一口氣:“原來是場噩夢啊……” “哼寺董!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刻剥,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤遮咖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后造虏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體御吞,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年漓藕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陶珠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡享钞,死狀恐怖揍诽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫩与,我是刑警寧澤寝姿,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站划滋,受9級特大地震影響饵筑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜处坪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一根资、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧同窘,春花似錦玄帕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春鹰椒,著一層夾襖步出監(jiān)牢的瞬間锡移,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工漆际, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淆珊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓奸汇,卻偏偏與公主長得像施符,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子擂找,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容