Linux之grep命令
global search regular expression(RE) and print out the line
一、命令形式
1. grep -n --color=auto 'str' filename/dirname
2. cat filename | grep ……
3. grep -E '(str)+\.?[0-9a-zA-Z]..str.*'
4. egrep 'str1|str2'
5. grep -F '*' ……
6. fgrep '*' ……
二、示例
1. grep 参数
* -n 行号
* --color=auto 结果颜色高亮显示,一般在alias中定义即可
* -c 对结果行计数
* -i 不区分大小写
* -v 反向搜索
* -m3 匹配行数达到3行后停止匹配
* -A1 同时打印搜索结果行的后一行
* -B3 同时打印搜索结果行的前三行
* -r 递归查找(搜索区域是dirname时)
* -l 只显示含搜索结果的文件路径和名称(搜索区域是dirname时)
* -E 扩展正则表达式
* -F 纯字符搜索
2. 正则表达式(grep未扩展)
2.1 单个字符匹配[]
1. 't[ae]st' 可匹配taste和test(在t和st之间存在a或者e,而不是ae)
2. 't[a-z]st' 在t和st之间存在一个小写字母
3. 't[a-zA-Z0-9]st' 在t和st之间存在一个大小写字母或数字
2.2 行首匹配^
2.3 行尾匹配$
2.4 反向匹配[^]
1. '[^g]oo' 含有oo,且oo前没有紧随字符g;
google不行,gooogle可以(goo不符合,但是ooo符合)
2. 'oo[^g]' 含有oo, 且oo后没有紧跟字符g;
3. '3[^0-9]8' 数字3和数字8之间,没有其他数字
4. '^[^#]\.$' 不以'#'开头,且以点号结尾(点号转义)
2.5 任意单字符.
1. 'g..le' g和le之间有两个任意字符,如google
2.6 重复字符*
1. 'go.*le' g和le之间有0到n个字符o,如gle、gole、goole
2. 'goo.*le' gle就不符合啦,起码得是gole
3. 'g[a-z].*g' g和g之间有0到n个任意小写字母
2.7 限定字符连续个数{},正则扩展,grep中需要转义
1. 'go\{2\}le' g和le之间的字符o必须重复2次,如goole
2. 'go\{2,3\}le' 重复2到3次
3. 'go\{2,\}le' 重复2到n次
2.8 字符在同一行出现1到n次,正则扩展,grep需要转义
'360+' 匹配存在1个或者多个360的行
'\(google\)\+' 同上
2.9 字符出现0或1次,正则扩展,grep需转义
'goo\?le' go和le之间存在一个o,或者不存在任何字符
2.10 存在字符a或者字母b,正则扩展,grep需转义
'google\|gooogle'
3. 正则扩展(grep -E,或者egrep)
上面需要转义的四个,在这里不用转义啦
1. 'go{3}le'
2. '(google)+'
3. 'goo?le'
4. 'goole|gooole'
4. 纯字符搜索(grep -F,或者fgrep)
'*' 这里写啥就是啥,星号就是星号,没有任何特殊含义