grep 命令詳解

[TOC]

介紹

grep (global search regular expression(RE) and print out the line,全面搜索正則表達(dá)式并把行打印出來)是一種強(qiáng)大的文本搜索工具,它能使用正則表達(dá)式搜索文本阅爽,并把匹配的行打印出來

  • egrep和fgrep的命令只跟grep有很小不同
  • egrep是grep的擴(kuò)展刺覆,支持更多的re元字符
  • fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞壳贪,也就是說氢妈,正則表達(dá)式中的元字符表示回其自身的字面意義眼坏,不再特殊

MacOS使用Free-BSD版本的grep菇肃,區(qū)別是很UNIX很死板

linux使用GNU版本的grep
它功能更強(qiáng),可以通過-G取募、-E琐谤、-F命令行選項(xiàng)來使用egrep和fgrep的功能

標(biāo)準(zhǔn)命令

grep [-acinv] [--color=auto] '[搜尋字符串]' filename
選項(xiàng)與參數(shù):
-V : 輸出grep指令的當(dāng)前版本
-a : 將 binary 文件以 text 文件的方式搜尋數(shù)據(jù)
-c : 計(jì)算找到 '搜尋字符串' 的次數(shù)
-i : 忽略大小寫的不同,所以大小寫視為相同
-n : 輸出行號(hào)
-v : 反向選擇玩敏,亦即顯示出沒有 '搜尋字符串' 內(nèi)容的那一行
--color=auto : 可以將找到的關(guān)鍵詞部分加上顏色的顯示
-An : 之后n行 after
-Bn : 之前n行 before
-Num : 例如 -5 就是前后5行
-I : 忽略二進(jìn)制文件
-r -R : 遞歸查找
-L : 只輸出匹配到的文件
-G : 基礎(chǔ)正則匹配
-E : 擴(kuò)展正則匹配 等效 egrep
-F : 匹配多字符串模式只能找固定的文本 等效 fgrep

搜索關(guān)鍵字

# 將/etc/passwd 中含有 root 的行都顯示出來
grep root /etc/passwd
# 將/etc/passwd斗忌,有出現(xiàn) root 的行取出來,同時(shí)顯示這些行在/etc/passwd的行號(hào)
grep -n root /etc/passwd
# 將/etc/passwd质礼,將沒有出現(xiàn) root 的行取出來
grep -v root /etc/passwd
# 將/etc/passwd,將沒有出現(xiàn) root 和nologin的行取出來
grep -v root /etc/passwd | grep -v nologin
# 用 dmesg 列出核心信息织阳,再以 grep 找出內(nèi)含 eth 那行,要將捉到的關(guān)鍵字顯色眶蕉,且加上行號(hào)來表示
sudo dmesg | grep -n --color=auto 'eth'
# dmesg 列出核心信息,篩選出帶有 `eth`的信息唧躲,列出 前2行(B before)造挽,后3行(A after)數(shù)據(jù)
sudo dmesg | grep -n 'eth' -A3 -B2
# dmesg 列出核心信息,篩選出帶有 `eth`的信息弄痹,列出 前后5行數(shù)據(jù)
sudo dmesg | grep -5 'eth'

根據(jù)文件內(nèi)容遞歸查找目錄

# 當(dāng)前目錄中搜索帶有 "echo" 的文件
grep "echo" *
# 遞歸當(dāng)前目錄及其子目錄下搜索帶有 "echo" 行的文件
grep -r "echo" *
# 遞歸當(dāng)前目錄及其子目錄下搜索帶有 "echo" 行的文件, 但是不顯示匹配的行饭入,只顯示匹配的文件
grep -r -L "echo" *
# 遞歸文件夾 "my/log" 打印含有 "echo" 的文件行路徑,行號(hào) 和內(nèi)容
grep -rIn "my/log" "echo"
# 遞歸某一類*.log 文件中含有 "echo"行的肛真,并且打印行號(hào)
find . -name "*.log" -exec grep -n "echo" {} \;
# 也可以使用xargs
find . -name "*.log" | xargs grep --color=auto -In "echo"

grep 正規(guī)表達(dá)式用法

grep 支持的就是 perl 風(fēng)格的正則谐丢, 出現(xiàn)正則不識(shí)別的問題使用 egrep

[] 通配單一字節(jié),無論[]中有多少內(nèi)容蚓让,都是當(dāng)一個(gè)占位來看待
^ 反向選則乾忱,也就是非這個(gè)字符串 比如一定不能有小寫字符 [^a-z]
^$ 行首 行尾符 只在非() 中生效 可以用于定位字符出現(xiàn)的位置
. 表示任意字節(jié),也就是通配符
* 表示復(fù)數(shù)字節(jié)历极,比如文件名稱全通配就是 *.* 任意后綴通配 .*

如果該字節(jié)組是連續(xù)的窄瘟,例如大寫英文/小寫英文/數(shù)字等等, 就可以使用[a-z],[A-Z],[0-9]等方式來書寫

限定字符的范圍

  • 可以使用[a-z],[A-Z],[0-9]等方式來書寫
  • 那么如果我們的要求字串是數(shù)字與英文就將他全部寫在一起执解,變成:[a-zA-Z0-9]
  • 不想要開頭是英文字母^[^a-zA-Z]
  • 開頭是小寫字節(jié)^[a-z]
  • 行尾結(jié)束為小數(shù)點(diǎn) 或者某種后綴 \.$ (\.so)$

任意一個(gè)字節(jié) . 與重復(fù)字節(jié) *

. (小數(shù)點(diǎn)):代表『一定有一個(gè)任意字節(jié)』的意思
* (星號(hào)):代表『重復(fù)前一個(gè)字符寞肖, 0 到無窮多次』的意思,為組合形態(tài)
  • 類似 good gred 之類的字符串 g..d
  • 兩個(gè) o 以上的字串 ooo*
  • g 開頭與 g 結(jié)尾的行衰腌,當(dāng)中的字符可有可無 g.*d

限定連續(xù) RE 字符范圍 {}

這個(gè)限定范圍必須和 . * 配合使用, 且因?yàn)樵趕hell中新蟆,{} 必須被轉(zhuǎn)意才可以使用

  • 找到兩個(gè) o 的字串 o\{2\}
  • g 后面接 2 到 5 個(gè) o ,然后再接一個(gè) d 的字串 go\{2,5\}d
  • 2 個(gè) o 以上的 goooo....d go\{2,\}d

egrep

使用擴(kuò)展grep的主要好處是增加了額外的正則表達(dá)式元字符集右蕊,這在匹配中文時(shí)常用
比如打印所有包含info或error的行 'info|error'grep就不會(huì)打印

如果在擴(kuò)展元字符前面加\琼稻,grep會(huì)自動(dòng)啟用擴(kuò)展選項(xiàng)-E,比如上面的匹配饶囚,這樣就合適了'info\|error'

  • 搜索所有包含0個(gè)或1個(gè)小數(shù)點(diǎn)字符的行 egrep '2\.?[0-9]
  • 找到一個(gè)或者多個(gè)連續(xù)的error的行 egrep '(error)+'

fgrep

查詢速度比grep命令快帕翻,它只能找固定的文本,而不是規(guī)則表達(dá)式

# 輸出在~/logs/my.log中包含error的行
fgrep  'error' ~/logs/my.log

擴(kuò)展

UNIX Linux 平臺(tái)處理文本的三大件 grep sed awk 建議熟練使用他們
查詢幫助文檔

man sed
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萝风,一起剝皮案震驚了整個(gè)濱河市嘀掸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌规惰,老刑警劉巖睬塌,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡揩晴,警方通過查閱死者的電腦和手機(jī)勋陪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硫兰,“玉大人诅愚,你說我怎么就攤上這事〗儆常” “怎么了违孝?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵苏研,是天一觀的道長等浊。 經(jīng)常有香客問我,道長摹蘑,這世上最難降的妖魔是什么筹燕? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮衅鹿,結(jié)果婚禮上撒踪,老公的妹妹穿的比我還像新娘。我一直安慰自己大渤,他們只是感情好制妄,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泵三,像睡著了一般耕捞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烫幕,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天俺抽,我揣著相機(jī)與錄音,去河邊找鬼较曼。 笑死磷斧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捷犹。 我是一名探鬼主播弛饭,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼萍歉!你這毒婦竟也來了侣颂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤枪孩,失蹤者是張志新(化名)和其女友劉穎横蜒,沒想到半個(gè)月后胳蛮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丛晌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斗幼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澎蛛。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蜕窿,靈堂內(nèi)的尸體忽然破棺而出谋逻,到底是詐尸還是另有隱情,我是刑警寧澤桐经,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布毁兆,位于F島的核電站,受9級(jí)特大地震影響阴挣,放射性物質(zhì)發(fā)生泄漏气堕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一畔咧、第九天 我趴在偏房一處隱蔽的房頂上張望茎芭。 院中可真熱鬧,春花似錦誓沸、人聲如沸梅桩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宿百。三九已至,卻和暖如春洪添,著一層夾襖步出監(jiān)牢的瞬間垦页,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工薇组, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留外臂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓律胀,卻偏偏與公主長得像宋光,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炭菌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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