Linux常用命令 | grep

作者簡介
李先生(Lemon),高級運維工程師(自稱),SRE專家(目標),夢想在35歲買一輛保時捷。喜歡鑽研底層技術,認為底層基礎才是王道。一切新技術都離不開作業系統(CPU、記憶體、磁碟)、網路等。堅持輸入輸出,記錄自己學習的點滴,在平凡中堅持前行,總有一天會遇見不一樣的自己。公眾號:運維汪(ID:Leeeee_Li)。
一、前言
自己平時比較喜歡記筆記,工作四五年,筆記上千篇。最近離職了,加上職場瓶頸,準備好好復盤和整理一下相關的筆記、梳理一下知識點,可能後面有一系列的博文輸出,從基礎到進階。

二、什麼是Grep
Global Regular Expression Print 全局正則表達式
Grep是一個Linux / Unix命令行工具,用於在指定的文件中搜索字元串。文本搜索模式被稱為正則表達式。當它找到匹配項時,它將輸出帶有結果的行。在搜索大型日誌文件時,grep命令非常方便。
語法:
grep [options] pattern [files]
三、常用參數
-c: 只輸出匹配行的數目
-h: 列印出匹配的行,但是不顯示其文件名
-i: 不區分大小寫
-l: 查詢多文件的時候只輸出包含匹配字元的文件名
-n: 列印匹配行以及行號
-v: 反向匹配,即顯示不匹配的行
-w: 匹配整個單詞,而不是整個字元串
-b: 顯示匹配的位置
-o: 只顯示匹配的字串
-s: 不顯示錯誤資訊
-e exp:匹配多個
-E:使用正則匹配
四、實例
1:匹配項標記顏色
echo 「This is a word \n heihei」 |grep word --color=auto
2:把/etc/passwd包含root的取出來
grep root /etc/passwd or cat /etc/passwd |grep root
3:把/etc/passwd不包含root的取出來
grep -v root /etc/passwd or cat /etc/passwd |grep -v root
4:demsg輸出的資訊中找出含eth的行,並且輸出行號,有顏色
dmesg | grep eth -n --color=auto
5:demsg輸出的資訊找出eth的行,並且找出含eth的前兩行和後三行
dmesg |grep eth -n -A3 -B2 --color=auto
五、grep退出的狀態
echo $?
# 0:表示成功
# 1:表示沒有匹配到
# 2:表示參數中的文件不存在
六、應用場景
1:匹配行的上下文
ifconfig | grep -C 3 "Link encap"
-A n 後n行,A記憶為(After)
-B n 前n行,B記憶為(Before)
-C n 前n行,後n行,C記憶為(Center)
2:用-c統計數目
grep -c "baidu.com" file.txt
3:根據文件內容查找目錄
grep "declare" 當前目錄下查找 grep -r "declare" 當前目錄以及子目錄下查找 grep -r -l "declare" 查找只顯示文件名稱,不具體顯示的行 grep -R --exclude-dir="filename" baidu.com 除開某一個目錄不匹配
4、過濾掉注釋行
grep ^[^#] filename
5、過濾掉有空格的注釋行
grep "^\s*[^# \t].*$" filename
6、在file2中找出包含file1字元串的字元串
file1:
ddf
ddc
file2:
shinjldin
adcddf
ddf
grep -f file1 file2
得到的結果:
adcddf
ddf
7、ps aux | grep init 與ps aux |grep [i]nit的區別
ps aux | grep init:

ps aux |grep [i]nit:

第一個init的時候她會把grep init也弄到進程里,所有可以匹配到init
第二個[i]nit的時候會把grep [i]nit 弄到進程里,但是[i]nit只能匹配init和nit,所有就只有一個
echo grep init |grep init echo grep init |grep [i]nit echo grep [i]nit |grep init echo grep [i]nit |grep [i]nit
七、grep -E 與 grep 的區別
1、使用方法
grep -E 「^[a-zA-Z0-9]」 filename grep "^[a-zA-Z0-9]" filename 如果不加E的話,會匹配出錯
2、實例
下面兩個寫法都能達到同一個目的,使用-E與不使用-E的寫法
cat a.txt |grep -oE 'id=[0-9]{9,10}' cat a.txt |grep -o 'id=[0-9]\{9,10\}'
八、學習交流
歡迎大家關注我的公眾號,一起交流、學習。