grep的正则表达式(regexp)
1、grep程序:
Linux下有文本处理三剑客 –grep sed awk
grep:文本 行过滤工具
Sed:文本 行生成器
awk:报告生成器(做文本输出格式化)
grep:包含三个命令:grep egrep fgrep ,它是用来进行模式(pattern)匹配的
egrep =grep –E//使用文件通配符进行匹配
*grep默认使用正则表达式进行文本匹配
grep的用法:
grep[option]…PATTERN[filename]
grep的常见选项:
-E 支持使用扩展的正则表达式(ERE)
-P 使用perl语言的正则表达式引擎(每一种语言的正则表达式引擎都不相同,甚至sed grep awk 使用的regexp引擎也不相同)
-i 忽略大小
-v 进行反选
-o 仅仅输出匹配的内容(默认输出的是匹配到的行)
--color=auto 语法着色
-n 显示行号
-w //匹配固定单词
PATTERN—正则表达式:
作用:通过一些特殊字符,来表达一类字符内容,然后交给前面的命令来执行;如果使用特使字符本身的含义,就需要进行转义;
回顾:文件通配符(globbing): *? [ ] [ ^ ]
1、字符匹配
. 任意一个字符 ?
[ ] 匹配范围内的任意一个字符
[ ^ ] 范围外任意一个字符
[0-9] [:digit:][: alnum:][:alpha:][:lower:][:upper:][:space:][:punct:]
2、次数匹配
* 匹配前面的(紧挨着的)字符0次到n次
?匹配前面的字符0次到1次
+ 匹配前面的字符1次到n次
{m} 匹配前面的字符m次 例:a{7} aaaaaaa
{m,n} 匹配前面的字符m到n次
{0,n} 匹配前面的字符0到n次
{m,} 匹配前面的字符至少m次
3、位置锚定
^锚定行首
$锚定行尾
锚定词首和锚定词尾
>锚定词尾
<锚定词首 <root/>
4、分组
Abc* abccc abc我们要看成一个整体
()示例:(abc)* abcabcabc abcccc
**分组特性:默认情况下,Linux系统会为系统指定变量,变量表示形式123…
例如:(+)
ip地址: 0-255.0-255.0-255
0-255
2 0-4 0-9[0-4][0-9]
2 5 0-5 25[0-5]
练习:
1、显示/proc/meminfo文件中大小s开头行
/grep –I “/^s” /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
/grep –v’’/bin/bash$” /etc/passwd
3、显示/etc/passwd文件中UID号最大的用户的用户名
sort –n –t: -k3 /etc/passwd |tail -1 |cut –d: -f1
4、如果用户root存在,显示其默认的shell程序
grep “^root>” /etc/passwd&> /dev/null&&grep “root>” /etc/passwd|cut –d: f7
id root &> /dev/null&&grep “^root>”/etc/passwd|cut d: -f7
5、找出/etc/passwd中的两位或三位
grep”[0-9]{2-3}” /etc/passwd
-w //匹配固定单词
<[0-9]{2,3}>
[0-9]{2,3}
-n 以数字进行排序.*任意字符