grep的功能强大,是linux行编辑的三剑客。linux
那grep是如何工做的 呢 ???git
grep命令在一个或者多个文件中搜索字符串模板。模板能够是一个被引用的字符串或者是一个单词。ide
其后面全部字符串被看作文件名。grep把搜索结果送道屏幕,可是不影响输入文件spa
格式内存
grep [OPTIONS] PATTERN [FILE...]字符串
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]it
实例模板
grep user /etc/passwdclass
说明 grep 将在文件 /etc/passwd 下搜索 模板tom。若是成功,若是成功搜索的行将显示在屏幕上。搜索
grep:
字符匹配
. 匹配任意一个单个字符
[] 匹配[]内任意字符 ,[A-Z]从大写A 到 Z ,其中 -表明范围内任意次
posix字符集
[[:digit:]] 数字
[[:lower:]] 小写字母
[[:upper:]] 大写字母
[[:space:]] 空格
[[:punct:]] 标点符号
[[:alpha:]] 字母(大写+小写)
[[:alnum:]] 数字+字母
次数匹配
* 匹配任意次
\? 匹配0次或1次
\{m,\} m次, 最少m次
\{0,n\} 最多n次
\{m,n\} 最多n次,最少m次
\是转义字符
grep “\.5”
grep '5\..'
grep “\.5” 表示打印包含字符串“.5”的行
用法
\. , \? , \(,\) , \{,\}
位置匹配
^ 行首锚定
$ 行尾锚定
分组
\(\)
把分组内的数据,保存到内存中,方便引用
引用
\(\)...\(\) $1$2
引用分组中 的内容,$1 表示引用第一个分组 ,$2 第二个分组
grep案例:
grep “^【we】” 表示打印全部w或者e开头的行。^表示 定词首,括号里的一个字符被匹配。
grep “^【we】$” 表示打印全部只有w或者e。^表示 锚定词首,$表示锚定词尾
grep “【a-z】\{9\}” 表示打印带每一个字符串带有9个连续字母的行
grep “\bair ” 表示打印 文件中有air单词的行 \b 是单词边界付
grep "aa*" 表示 打印 文件 中全部 带 一个 或者 多个 a 。*表示0个或者多个
grep “\<air\> ” 表示 打印 包含 air 的 行 。\< 表示是单词的开头 , \ >单词结尾
grep -i “^p.*” 表示打印,不区分大小写,以P开头,的任意字符的行