1. 程式人生 > 實用技巧 >Linux常用命令 | grep

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\}'

八、學習交流

歡迎大家關注我的公眾號,一起交流、學習。