1. 程式人生 > >grep的簡單理解

grep的簡單理解

grep 大小寫 earch swd 匹配 應用 sea 情況 -a

概述:
grep最早由肯·湯普遜寫成。原先是ed下的一個應用程序,名稱來自於g/re/p(globally search a regular expression and print,以正則進行全域查找以及打印)。在ed下,輸入g/re/p這個命令後,會將所有匹配‘定義樣式’的字符串,以行為單位打印出,但是並不對原文件內容進行修改。grep命令在對一個或多個文件的內容進行基於模式搜索的情況下是非常有用的。模式可以是單個字符、多個字符、單個單詞、或者是一個句子。當然最有用的還是正則。

例1 在文件中查找模式(單詞)
1 grep  match_pattern   file_name    #標記匹配顏色加 --color=auto 選項
2 grep "match_pattern"  file_name

例2 在多個文件中查找模式。
grep "match_pattern" file_1 file_2 file_3 ...

例3 使用-l參數列出包含指定模式的文件的文件名。
[email protected]:~# grep -l root /etc/passwd /etc/shadow /etc/fstab 

例4 使用-n參數,在文件中查找指定模式並顯示匹配行的行號
grep "text" -n file_name 
cat file_name | grep "text" -n
grep "
text" -n file_1 file_2 #多個文件 使用正則表達式 -E 選項: grep -E "[1-9]+"
egrep "[1-9]+" 只輸出文件中匹配到的部分 -o 選項: echo this is a test line. | grep -o -E "[a-z]+\."
line.
echo this is a test line. | egrep -o "[a-z]+\."
line.

例5 使用-v參數輸出不包含指定模式的行

grep -v "match_pattern" file_name
#只在目錄中所有的.php和.html文件中遞歸搜索字符 grep
"main()" . -r --include *.{php,html} #在搜索結果中排除所有README文件 grep "main()" . -r --exclude "README" #在搜索結果中排除filelist文件列表裏的文件 grep "main()" . -r --exclude-from filelist

例6 使用 ^ 符號輸出所有以某指定模式開頭的行 例7 使用 $ 符號輸出所有以指定模式結尾的行。

例8 使用 -r 參數遞歸地查找特定模式
grep -r root /etc/ #上面的命令將會遞歸的在/etc目錄中查找“root”單詞

例9 使用 grep 查找文件中所有的空行
grep ^$ /etc/shadow  #由於/etc/shadow文件中沒有空行,所以沒有任何輸出

例10 使用 -i 參數忽略大小寫

例11 使用 -e 參數查找多個模式,#也可以使用-f選項來匹配多個樣式,在樣式文件中逐行寫出需要匹配的字符。
echo this is a text line | grep -e "is" -e "line" -o 
is
line
cat patfile
aaa bbb
echo aaa bbb ccc ddd eee | grep -f patfile -o

例12 使用 -f 用文件指定待查找的模式
[email protected]:~# cat grep_file
^root
root  
false$   
[email protected]:~# grep -f grep_file /etc/passwd  

例13 使用 -c 參數計算模式匹配到的數量
[email protected]:~# grep -cf file /etc/passwd  #cf參數的順序不能顛倒,file裏定義要匹配的模式
2 

例14 輸出匹配指定模式行的前或者後面N行
a)使用-B參數輸出匹配行的前4行
b)使用-A參數輸出匹配行的後4行
c)使用-C參數輸出匹配行的前後各4行

例15 -q 靜默輸出,用於測試

例16 打印樣式匹配所位於的字符或字節偏移
echo gun is not unix | grep -bo "not"
7:not
#一行中字符串的字符便宜是從該行的第一個字符開始計算,起始值為0。選項 -b -o 一般總是配合使用。

grep的簡單理解