一:grep与egrep简介:
grep与egrep是在linux中对linux文本搜索用的比较多的一个工具。它结合正则表达式实现与模型匹配的行。
二:语法格式:
grep [option]... ‘PATTERN‘ FILE... 支持基本正则表达式
egrep [option]... ‘PATTERN‘ FILE...支持扩展正则表达式
[option]常用的主要有:
-v: 反向选取即显示哪些没有匹配到的行
-o: 显示匹配到的字符串,而不是整行
-i: ignore-case,忽略字符大小写
-E: 支持使用扩展正则表达式相当于egrep
PATTERN:
这里主要指的是正则表达式 ,正则表达式是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能;
元字符:不表示其字面意义,而用于额外功能性描述,分别为基本正则表达式和扩展正则表达式。
三:我们结合grep与egrep实例 简单介绍下两种的区别:
1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf
# egrep "^[[:space:]]{1,}" /boot/grub/grub.conf
2.显示当前系统上root、fedora或user1用户的默认shell;
# grep -E "^(root|fedora|user1):" /etc/passwd | cut -d: -f7 注意其中可以直接使用逻辑表达式中的"|"符号
3.找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;
# grep -o "\<[[:alnum:]]\+\>\(\)" /etc/rc.d/init.d/functions
# egrep -o "\<[[:alnum:]]+\>\(\)" /etc/rc.d/init.d/functions 注意其中可以直接使用扩展正则表达式中的"+"号
4.使用echo命令输出一个路径,而后使用grep取出其基名;
# echo "/etc/sysconfig/" | grep -o "[[:alnum:]]\+/\?"
# echo "/etc/sysconfig/" | egrep -o "[[:alnum:]]+/?" 注意其中可以直接使用?号,grep则需要转译
不难看出egrep 可以直接使用一些grep中遇到的需要转译的字符
四: grep与egrep总结:
grep支持的基本正则表达式有:
字符匹配:., .*, [], [^]
次数匹配:(通过分组的方式对不止一个字符做次数匹配) *, \?, \+, \{m,n\}
位置锚定:^, $, \< (\b), \> (\b)
分组及引用:\(\), \n
egrep支持的扩展正则表达式有:
次数匹配:*, ?, +, {m,n}
分组引用:(), \n
或者:a|b
因此 我们发现在egrep的用法更加强大与简洁
linux 中的文本处理工具,grep,egrep