egrep进阶

egrep:支持扩展的正则表达式,实现类似于grep的文本过滤功能(与grep -E 功能一致);

使用方式: 

egrep [选项] 模式 文件

常用选项:

--color=auto:对匹配到的文本做着色(加颜色)高亮显示,默认为红色;

-i:忽略大小写;

-o:仅显示匹配到字符串本身;

-v:显示不包含匹配文本的所有行;

-G:支持基本正则表达式;

-q:禁止输出任何结果,已退出状态表示搜索是否成功;

-A n(数字):显示匹配行及后n行;

-B n(数字):显示匹配行及前n行;

-C n(数字):显示匹配行及前后n行;

扩展正则表达式的元字符:

字符匹配;

.:点号匹配任意单个字符;

[]:中括号匹配指定范围内的任意单个字符;

[^]:匹配指定范围外的任意单个字符;

数字:[0-9] 或者 [[:dight:]];

所有小写字符:[[:lower:]];

所有大写字符:[[:upper:]];

所有字母(包括大小写): [[:alpha:]];

数字及字母: [[:alnum:]];

标点符号: [[:punct:]];

空白字符: [[:space:]];

次数匹配;

*(星号):匹配前面字符任意次,0次、1次和多次;例如:匹配x*y;axy、ay、xxxxxy都符合匹配要求;

?(问号):匹配其前面的字符0次或1次;即前面的字符可有可无;

+(加号):匹配其前面的字符1次或多次;即前面的字符要出现至少1次;

{m}(m代表数字):匹配前面字符m次;

{m,n}(m,n代表数字):匹配前面字符至少m次,最多n次;

{0,n}:匹配前面字符最多n次;

{m,}:匹配前面字符至少m次;

位置锚定;

^:行首锚定,用于模式的最左侧;例如:^root;

$:行尾锚定,用于模式的最右侧;例如:root$;

 

\< 或 \b:单词词首锚定,用于单词的左侧;例如:\<root;

\> 或 \b:单词词尾锚定,用于单词的右侧;例如:root\>;

分组及引用;

 ()(括号):将一个或多个字符捆绑在一起,当作一个整体进行处理;例如:(xy)*,匹配xy字符0次,1次或多次;

注意:分组:括号内的模式匹配到的字符会被记录于正则表达式引擎自动记录于内部的变量中:

后向引用:\1:模式从左侧其,从第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

\2:模式从左侧其,从第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

\3:模式从左侧其,从第三个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

或;

|:a|b;表达为a或者b;

注意:C|cat:表达为C或cat; (C|c)at:表达为Cat或者cat;

练习:1、显示/etc/passwd文件中不以/bin/bash结尾的行;

语句:~]# grep -E -v "/bin/bash$" /etc/passwd;

2、显示/etc/passwd文件中两位数或三位数;

语句:~]# grep  -E "\<[0-9]{2,3}\>" /etc/passwd

3、找出/etc/rc.d/rc.sysinit或/etc/grub2.cfg文件中,以至少一个空白字符开头,且后非空白字符的行;

语句:~]# grep  -E "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg;

4、找出“netstat -tan”命令的结果中以“LISTEN”后跟0、1或多个空白字符结尾的行;

语句:~]# netstat -tan | grep  -E "LISTEN[[:space:]]*$";

5、找出/proc/meminfo文件中,所有以大写或小写s开头的行:

语句:~]# grep -i "^s" /proc/meminfo;

语句:~]# grep  -E "^S|^s" /proc/meminfo;

语句:~]# grep "^[Ss]" /proc/meminfo;

语句:~]# grep  -E "^(S|s)" /proc/meminfo;

6、显示当前系统上root、Centos或者user1用户的相关信息;

语句:~]# grep -E "^(root|Centos|user1)\>" /etc/passwd;

7、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;

语句:~]# grep -E "[[:alnum:]]+\(\)" /etc/rc.d/init.d/functions;

8、使用echo命令输出一绝对路径,使用egrep取出其基名:

语句: ~]# echo /etc/sysconfig | grep -E -o "[^/]+/?$";

取出其路径名,相当于dirname命令;

语句: ~]# echo /etc/sysconfig | grep -E -o "^/[[:alnum:]]*";

5、找出ifconfig命中结果中的1-255之间的数值;

语句: ~]# ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"

6、找出ifconfig命中结果中的IP地址;

语句: ~]# ifconfig | grep -E -o "\<([0-9]{1,3}.{1}[0-9]{1,3}.{1}[0-9]{1,3}.{1}[0-9]{1,3})\>";

7、找出/etc/passwd 文件中用户名与shell一致的行;

语句: ~]# grep -E "^([^:]+\>).*\1$" /etc/passwd;

fgrep:不支持正则表达式元字符;

当无需要用到元字符去编写模式时,使用fgrep效果更好;

 

 

posted on 2022-11-29 17:24  暮夜~  阅读(483)  评论(0编辑  收藏  举报

导航