一、描述
搜索符合條件的所有行,并將結果輸出到STDOUT;
默認搜索匹配的PATTEN在行中的位置不確定。
二、常見用法
grep PATTEN FILE
//搜索匹配PATTEN字符串的所有行
//PATTEN:過濾條件,也叫搜索匹配條件
“root”??????? //字符串
“$USER”?????? //變量–>字符串
`whoami`????? //命令–>執行結果–>字符串
grep -v PATTEN FILE
//搜索匹配不包含PATTEN符串的所有行
grep -n PATTEN FILE
//搜索結果加行號
//等價寫法:cat -n FILE | grep PATTEN
grep -i PATTEN FILE
//PATTEN字符串忽略大小寫
grep -o PATTEN FILE
//只搜索PATTEN字符串本身
grep -q PATTEN FILE
//靜默執行,不顯示結果
//等價寫法:grep PATTEN FILE &> /dev/null
$?? ??? 0?? ??? //有包含PATTEN的行
$?? ??? 1?? ??? //無包含PATTEN的行
grep -A3 PATTEN FILE
//包含PATTEN字符串的后3行也做顯示
grep -B3 PATTEN FILE
//包含PATTEN字符串的前3行也做顯示
grep -C3 PATTEN FILE
//包含PATTEN字符串的前3行和后3行也做顯示
grep PATTEN1 FILE | grep PATTEN2
//過濾同時包含PATTEN1和PATTEN2的所有行
grep -e PATTEN1 -e PATTEN2 FILE
//過濾包含PATTEN1或PATTEN2任意一個的所有行
grep -w WORDS FILE
//過濾包含WORDS單詞的所有行
//在grep視角,
字母、數字、下劃線:都屬于單詞的一部分
其他字符:視為單詞的分隔符
grep -f PATTENLIST FILE
//先把PATTENLIST的內容識別成一個或多個PATTEN
PATTEN1 PATTEN2 […]
//然后過濾包含PATTEN1或PATTEN2或[…]任意一個的所有行
//等價寫法:grep -e PATTEN1 -e PATTEN2 [-e […]] FILE
grep -E EXT_PATTEN FILE
//支持擴展的正則表達式
三、正則表達式(一):字符匹配
echo STRINGS | grep PATTEN
//用于字符匹配的特殊字符
.????? ??? ??? //表示一個任意字符
\.???? ??? ??? //轉義字符,表示 . 本身
[.]??????? ??? //中括號里面的 . 表示 . 本身,不需要轉義
[xyz]????? ??? //取集合[x,y,z]中任意一個字符
[^xyz]???? ??? //取集合的補集中任意一個字符(不再包含x/y/z)
四、正則表達式(二):匹配次數
echo STRINGS | grep PATTEN
//用于匹配次數的特殊字符
c*???????? ??? //表示字符c出現任意次數(零次/一次/多次)
.*???????? ??? //表示任意一個字符出現任意次數(零次/一次/多次)
[a-z]*???? ??? //表示集合[a-z]閉區間中的任意一個字符出現任意次數(零次/一次/多次)
c\???????? ??? //表示字符c最多出現一次(零次/一次)
.\???????? ??? //表示任意一個字符最多出現一次(零次/一次)
[a-z]\???? ??? //表示集合[a-z]閉區間中的任意一個字符最多出現一次(零次/一次)
c\+??????? ??? //表示字符c至少出現一次(一次/多次)
.\+??????? ??? //表示任意一個字符至少出現一次(一次/多次)
[a-z]\+??? ??? //表示集合[a-z]閉區間中的任意一個字符至少出現一次(一次/多次)
c\{16,\}?? ??? //表示字符c至少出現16次(16次/16+次)
c\{16,20\}??? //表示字符c至少出現16次,但最多出現20次(16次/17次/18次/19次/20次)
c\{,20\}????? //表示字符c最多出現20次(零次/一次/……/20次)
五、正則表達式(三):位置錨定
echo STRINGS | grep PATTEN
//用于位置錨定的特殊字符
^str????????? //表示以字符串str開頭的行(行首)
str$????????? //表示以字符串str結尾的行(行尾)
^$??????????? //表示完全的空行(無法過濾含有不可見字符的假空行)
^[:space:]*$? //表示包含空格鍵或Tab鍵的假空行和完全的空行(徹底過濾包含不可見字符的假空行)
\<word??????? //表示以字符串word為詞首的單詞(詞首)
word\>??????? //表示以字符串word為詞尾的單詞(詞尾)
\<word\>????? //表示以字符串word為詞首和詞尾的單詞(詞首+詞尾)
\bword\b????? //界定符\b是單詞的邊界,表示把字符串word當做一個獨立的單詞(界定符)
//在grep視角,
字母、數字、下劃線:都屬于單詞的一部分
其他字符:視為單詞的分隔符
六、正則表達式(四):分組
echo STRINGS | grep PATTEN
//用于分組的特殊字符
\(str\)?????? //表示把字符串str整體當成一個分組
\(str\)\{3,\} //表示字符串分組str至少出現3次
\(str\).*\1?? //等價寫法: \(str\).*\(str\)
// \1 表示 \(str\) ,相當于字符串分組str
//表示把字符串分組str整體當作一個參考,在 .* 后必須出現一模一樣的字符串分組str
//分組的匹配結果必須一樣
\(str1\)\?.*\(str2\)\+\1.*\2
//等價寫法: \(str1\)\?.*\(str2\)\+\(str1\)\?.*\(str2\)\+
// \1 代表 \(str1\)\? ,相當于字符串分組str1
// \2 代表 \(str2\)\+ ,相當于字符串分組str2
//表示把字符串分組str1整體當作一個參考,在 .* 后必須出現一模一樣的字符串分組str1
//表示把字符串分組str2整體當作一個參考,在 .* 后必須出現一模一樣的字符串分組str2
//分組的匹配結果必須一樣
^\<\(word\)\>.*\1$
//等價寫法: ^\<\(word\)\>.*\<\(word\)\>$
// \1 代表 \<\(word\)\> ,相當于字符串分組str
//表示把單詞word當作一個參考,在 .* 后必須出現一模一樣的單詞word
//在grep視角,
字母、數字、下劃線:都屬于單詞的一部分
其他字符:視為單詞的分隔符
//分組的匹配結果必須一樣
a\|b????????? //表示字符a或者字符b
^\(str1\|str2\)
//表示以字符串str1或者字符串str2作為行首
-EOF-
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95429