grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
.------------- 匹配任意单个字符
[]------------- 匹配指定范围内的任意单个字符
[^]------------- 匹配指定范围内的任意单个字符
[:lower:]------------- 所有小写字母
[:upper:]------------- 所有大写字母
[:alpha:]------------- 所有字母
[:alnum:]------------- 所有数字和字母
[:digit:]------------- 所有数字
[:space:]------------- 所有空白字符
[:punct:]------------- 所有标点符号
*------------- 任意次
\?------------- 0或1次
\+------------- 1或多次;
\{m\}------------- 精确限制为m次
\{m,n\}------------- 至少m次,至多n次,[m,n]
\{0,n\}------------- 至多n次
\{m,\}------------- 至少m次
^------------- 行首锚定,用于模式的最左侧
$------------- 行尾锚定,用于模式的最右侧
\<或者\b------------- 词首锚定,用于表示单词的模式的左侧
\>或者\b------------- 词尾锚定,用于表示单词的模式的右侧
^$------------- 空白行
()
|
就是把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。
egrep改良了许多传统 grep 不能或不便的操作,如:
grep 中的?和+要写成\?,\+, 但 egrep 不用
grep 不支持a|b或 (abc|xyz) , 但 egrep 则可以
grep 在处理次数匹配x{n,m} 时, 要用 \{ 与 \} 处理,egrep 则不用
。。。只知道这么多了,欢迎补充!
实际遇到的问题
1.在一堆文件中找到包含A但是又不包含B的文件名
1 grep -lL 'lihongbin' `grep -Pinr 'zhaoyingnan' *|awk -F : '{print $1}'`
2.匹配ip
1 grep -PInr "(?<='|/|\")[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" --color --include=*.php --exclude-dir=config --exclude-dir=logs 2 grep -PInr '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(?=[^\)\.0-9])' * --color --include=*.php --exclude-dir=config --exclude-dir=logs