首页 > 技术文章 > Linux之grep命令

jiukun 2018-07-17 19:37 原文

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)

'*' 这里写啥就是啥,星号就是星号,没有任何特殊含义

推荐阅读