/*
* Global Regular Expression Print
*/
-c : 只输出匹配行的计数。
-I : 不区分大小写(只适用于单字符)。
-h : 查询多文件时不显示文件名。
-l : 查询多文件时只输出包含匹配字符的文件名。
-n : 显示匹配行及行号。
-s : 不显示不存在或无匹配文本的错误信息。
-v : 显示不包含匹配文本的所有行。
\ : 忽略正则表达式中特殊字符的原有含义。
^ : 匹配正则表达式的开始行。
: 匹配正则表达式的结束行。
\< : 从匹配正则表达式的行开始。
\> : 到匹配正则表达式的行结束。
[ ] : 单个字符,如[A]即A符合要求 。
[ - ] : 范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。 : 所有的单个字符。
* : 有字符,长度可以为0。
grep 'test' d* # 显示所有以d开头的文件中包含test的行。
grep 'test' aa bb cc # 显示在aa,bb,cc文件中匹配test的行。
grep '[a-z]\{5\}' aa # 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep 'w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),
这些字符后面紧跟着另外一个es(\1),找到就显示该行。
如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1′就可以了。
grep -r # 明确要求搜索子目录
grep -d skip # 忽略子目录
grep linux /usr/src/linux/Documentation/* | less
grep -r -i -n -w "KPP_BASE_ADDR" *
grep -i pattern files : 不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files : 只列出匹配的文件名,
grep -L pattern files : 列出不匹配的文件名,
grep -w pattern files : 只匹配整个单词,而不是字符串的一部分(如匹配'magic',而不是'magical'),
grep -C number pattern files : 匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files : 显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 : 显示既匹配 pattern1 又匹配 pattern2 的行。
/* \< 和 \> 分别标注单词的开始与结尾 */
grep man * 会匹配 'Batman'、'manic'、'man'等,
grep '\<man' * 匹配'manic'和'man',但不是'Batman',
grep '\<man\>' 只匹配'man',而不是'Batman'或'manic'等其他的字符串。
'^' : 指匹配的字符串在行首,
'$' : 指匹配的字符串在行尾,
'ls -l | grep '^a' # 通过管道过滤ls -l输出的内容,只显示以a开头的行。