4、grep与正则表达式
1、grep程序
Linux下有文本处理三剑客 -- grep sed awk
grep:文本 行过滤工具(一行一行进行匹配)
sed:文本 行编辑器(一行一行编辑)
awk:报告生成器,做输出格式化
grep
包含三个命令:grep egrep fgrep,它们是用来进行 行模式(pattern)匹配的
egrep = grep -E -- 使用扩展的正则表达式进行匹配
fgrep = fast grep -- 只使用文件通配符进行匹配
grep默认使用正则表达式进行文本匹配
grep的用法:
grep [option] ... PATTERN [filename]
a* -- 以a开头的所有文件
grep的常见选项 -- option
-E 支持使用扩展的正则表达式
-P 使用perl语言的正则表达式引擎进行搜索(每一种语言的正则表达式引擎都不相同,甚至sed grep awk使用的regexp引擎都是不同的)
-i 忽略大小写
-v 进行反选
-o 仅仅输出匹配的内容
--color=auto 语法着色
-n 显示行号
-w 匹配固定单词
PATTERN -- 正则表达式
作用:通过一些特殊字符,来表示一类字符内容,然后交给前面的命令来执行;如果使用特殊字符本身含义,就需要\进行转义
回顾:文件通配符
* ?任意单个字符 []范围内的任意一个字符 [^]取反
1.字符匹配
. 任意一个字符 (相当于文件通配符的?)
[] 范围内的任意一个字符
[^] 取反
字符类:数字[:digit:] 字母和数字[:alnum:] 字母[:alpha:] 大写[:upper:] 小写[:lower:] 特殊字符[:punct:] 空白字符[:space:]
2.次数匹配
* 匹配前面紧挨着的字符0次到n次
\?匹配前面紧挨着的字符0次到1次
\+ 匹配前面紧挨着的字符1次到n次
\{m\}匹配前面的字符m次
\{m,n\} 匹配前面的字符m到n次
\{0,n\} 匹配前面的字符0到n次
\{m,\} 匹配前面的字符m到无数次
[0-2][]
3.位置锚定
^ 锚定行首
$ 锚定行尾
\b 锚定单词词首和锚定词尾(\b用在单词前面就是锚定词首,用在后面就是锚定词尾)
\> 锚定词尾
\< 锚定词首
4.分组
abc* abcccc abc我们要看成一个整体
\(\) 示例:\(abc\)* abcabcabc
**分组特性:默认情况下。linux系统会为分组制定变量,变量的表示形式为\1\2\3......
\(ab+\(xy\)*\) 其中\1 = ab+\(xy\)*, \2 = xy
扩展正则表达式:
【标准正则表达式中的\都可以去掉】
分组:()后向引用\1\2\3
或 : |
示例:grep -E "()
练习:
1、显示/proc/meminfo文件种大小s开头的行
grep -i "^s" /proc/meminfo
2、显示
0-255.0-255.0-255.0-255