grep命令是linux中強大的文本搜索工具,那麼grep取名是怎麼來的呢?
grep : g (globally) search for a re (regular expression) and p (print ) the results
從上面的英文解釋中可以看出,grep命令使用正則表達式搜索文本,並把匹配的行打印出來
grep [OPTION]... PATTERN [FILE]...
alias grep='grep --color=auto'再以source .bashrc來立即生效即可這樣在每次grep搜索之後,自動高亮匹配效果了。
grep 'she' test.txt grep -i 'she' test.txt grep -c 'she' test.txt grep -in 'she' test.txt grep -v 'she' test.txt grep -w 'she' test.txt grep -o 'she' test.txt grep -C 2 'she' test.txt
著重說下-o參數
假如grep 'she' test.txt輸出為
she is beautiful
I like she
則grep -o 'she' test.txt輸出為
she
she
意思就是只顯示匹配項部分,行中其它部分不顯示
另說明下,PATTERN是正則表達式,為了避免shell的元字符對正則表達式的影響,請用單引號('')括起來,不要用雙引號括起來("")或者不括起來。
\:轉義字符。
^:錨定行的開始。如:'^help'匹配以help開頭的行
$:錨定行的結束。如:'help$'匹配以help結尾的行
.:匹配任意一個非換行符的字符。如:'he.p'匹配help,heap等,但不能匹配hep
*:前面的字符重復0到多次。如:'he*p'匹配hp,hep,heep等
[list]:匹配字符集中的一個字符。如:'[hk]elp'匹配help,kelp
[n1-n2]:匹配字符范圍中的一個字符。如:'[a-z]elp'匹配aelp,belp,...,zelp
[^list]:匹配字符集以外的一個字符。如:'[^a-d]elp'不匹配aelp,belp,celp,delp。可匹配eelp,help, elp等
\{n1,n2\}:前面的字符重復n1-n2次。如:'h\{1,3\}elp'匹配help,hhelp,hhhelp。
\<:錨定單詞的開始。如:'\<h'匹配以h開頭的單詞。匹配help,但不匹配while
\>:錨定單詞的結尾。如:'p\>'匹配以p結尾的單詞。匹配help,但不匹配person
特別說明:^在PATTERN開始位置出現才表示錨定行的開始,其它位置出現只是作為^字符。
例如:
grep '^help' test.txt 表示匹配以help開頭的行
grep 'help^' test.txt 表示匹配包含字符串help^的行
同理,$在PATTERN末尾位置出現才表示錨定行的結束,其它位置出現只是作為$字符。
PATTERN為'^$'表示空行,因為只有行首和行尾
\{n1,n2\}中n2可省略,表示前面字符重復n1至多次,重復次數不設上限
grep一般情況下支持基本正則表達式,可以通過參數-E支持擴展正則表達式,另外grep單獨提供了一個擴展命令叫做egrep用來支持擴展正則表達式,這條命令和grep -E等價。
+:前面的字符重復1到多次。如:'he+p'匹配hep,heep,heeep等,但不匹配hp
?:匹配0或1次前面的字符。如:'he?p'匹配hp,hep
|:或的方式匹配多個字串。如:'help|heap'匹配help,heap
():匹配整個括號內的字符串。如:'(help)+'匹配help,helphelp等,注意與'help+'的區別