linux中的grep命令


定義: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM