定義:grep用來搜索文件中符合條件的字符串,並返回包含該字符串的所有行
語法:
grep [options] pattern [files]
一些常見選項的解釋
-c : 計算包含樣式的行數 -h : 顯示包含該樣式的行,但是不顯示該行所屬的文件的名字 -i : 忽略字符大小寫的差別 -l : 只展示文件名字 -n : 展示包含該樣式的行以及行號 -v : 顯示所有不包含樣式的行 -e exp : 指定字符串作為查找文件內容的范本樣式。 -f file : 指定規則文件,其內容含有一個或多個規則樣式,讓grep查找符合規則條件的文件內容,格式為每一行的規則樣式。 -E : 將樣式作為擴展的正則表達式使用 -w : 只顯示全字符合的行 -o : 只顯示包含pattern的那一行中匹配成功的部分,且每部分逐行顯示
grep應用舉例
1) 如何在linux的文件中查找一個字符串. 比如我想在/etc/passwd中查找yiran這個用戶,輸入
grep yiran /etc/passwd
輸出
yiran:x:1000:1000:Yiran,,,:/home/yiran:/bin/bash
如果想讓grep忽略pattern的大小寫,可以使用-i選項
grep -i yiran /etc/passwd
事實上最后一個命令和如下命令的作用是一樣的
cat /etc/passwd | grep -i yiran
同理 cat /etc/passwd | grep yiran 和 grep yiran /etc/passwd 結果也是一樣的
2) 如何遞歸的使用grep, 比如我想在facenet這個文件夾下中查找所有的'.jpg'文件,但是facenet這個文件夾又包含很多個文件夾,這時候可以用-r遞歸的查詢facenet中的每個文件夾
grep -r '.jpg' facenet
輸出
顯示的結果中,左邊的是找到的行所在的文件名,如果我們不希望出現這些文件名可以使用-h選項
grep -h -r '.jpg' facenet
或者
grep -hr '.jpg' facenet
3)如何使用grep只搜索完整字符串?換句話說當我們想查找ha這個詞,grep命令可能會返回haha, yaha, hahaha等等,但我只想要ha這個詞.這時我們可以用-w這個命令
$ grep -w "ha" file
4)如何用grep在文件中搜索兩個不同的詞?比如我想在一個文件中查找foo或者boo這個詞,可以使用'-E' 加上正則表達式中的分支結構'|':
$ grep -E 'word1|word2' /path/to/file
grep -E和egrep命令實際上是一樣的,上面的命令和如下命令等同,會顯示所有含有foo的行以及所有含有boo的行.
$ egrep 'word1|word2' /path/to/file
5)如何使用grep實現多條件查詢?比如我想查詢文件中既含有foo也含有boo這兩個詞的行,可以使用如下命令,它會返回既包含foo也包含boo的行
grep 'word1' /path/to/file | grep 'word2'
6)如何列出含有pattern的文件的文件名.使用-l命令列出所有含有'main'的c文件
$ grep -l 'main' *.c
7)查找以某一字符串開頭的行,比如我想查找以word1開頭的所有行,可以用'^'正則表達式來完成此操作
$ grep "^word1" /path/to/file
同理,想查找以某一字符串結尾的行可以用'$'符號
$ grep "word2$" /path/to/file
8) 可以使用-f命令從文本中獲取pattern.每行一個pattern
$cat pattern.txt happy enjoy sweet
$grep –f pattern.txt happiness.txt
使用管道和grep命令
管道命令 'cmd1|cmd2' 會將左邊命令的輸出流作為右邊命令的輸入流,命令之間存在很強的依賴關系,並且管道命令只能處理正確的輸出數據流。
grep經常使用管道的數據進行查找的命令,比如說剛剛用的 cat /etc/passwd | grep -i yiran . 其中grep使用cat的標准輸出作為標准輸入.
查找正在運行的python進程
ps -aux | grep pyhton
其中ps -aux 會返回目前所有的正在內存當中的程序,grep pyhton會從這些程序中查找pyhton程序.
顯示cpu模型的名字
cat /proc/cpuinfo |grep -i 'Model'
輸出結果
model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz model : 142 model name : Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
reference How To Use grep Command In Linux / UNIX