正则表达式与扩展正则表达式

基本正则表达式

字符匹配:
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[-]:匹配[]中指定范围内的任意一个字符,要写成递增
POSIX字符类:
[:digit:]:匹配任意一个数字字符
[:lower:]:匹配小写字母
[:upper:]:匹配大写字母
[:alpha:]:匹配任意一个字母字符(包括大小写字母)
[:alnum:]:匹配任意一个字母或数字字符
[:space:]:匹配一个包括换行符、回车等在内的所有空白符
[:punct:]:匹配标点符号
\:转义符,将特殊字符进行转义,忽略其特殊意义
匹配次数:
*:匹配前面的字符任意次
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次;即前面的可有可无
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面的字符至少m次;
位置锚定:
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$:空白行
单词锚定:
\< 或 \b:词首锚定;用于单词模式的左侧;
\> 或 \b:词尾锚定;用于单词模式的右侧;
\<PATTERN\>:匹配整个单词;
分组:
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;\(xy\)*ab
Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\2:从左侧起,第二个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\(ab\+\(xy\)*\):
\1: ab\+\(xy\)*
\2: xy
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)

扩展正则表达式:

字符匹配
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[-]:匹配[]中指定范围内的任意一个字符,要写成递增
POSIX字符类:
[:digit:]:匹配任意一个数字字符
[:lower:]:匹配小写字母
[:upper:]:匹配大写字母
[:alpha:]:匹配任意一个字母字符(包括大小写字母)
[:alnum:]:匹配任意一个字母或数字字符
[:space:]:匹配一个包括换行符、回车等在内的所有空白符
[:punct:]:匹配标点符号
\:转义符,将特殊字符进行转义,忽略其特殊意义
匹配次数:
*:匹配前面的字符任意次
.*:任意长度的任意字符
?:匹配其前面的字符0或1次;即前面的可有可无
+:匹配其前面的字符至少1次;
{m}:匹配前面的字符m次;
{m,n}:匹配前面的字符至少m次,至多n次;
{0,n}:匹配前面的字符至多n次;
{m,}:匹配前面的字符至少m次;
位置锚定:
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$:空白行
单词锚定:
\< 或 \b:词首锚定;用于单词模式的左侧;
\> 或 \b:词尾锚定;用于单词模式的右侧;
\<PATTERN\>:匹配整个单词;
分组:
():将一个或多个字符捆绑在一起,当作一个整体进行处理;
(xy)*abNote:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\2:从左侧起,第:二个左括号以及与之匹配右括号之间的模式所匹配到的字符;
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
或者:
a|b
C|cat: C或cat

例题:
1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
grep “^[sS]” /proc/meminfo
      grep -i “^s” /proc/meminfo
      grep -e ^s -e ^S /proc/meminfo
      grep “^S \| ^s” /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行;
grep -v “/bin/bash$” /etc/passwd

3、显示/etc/passwd文件中ID号最大的用户的用户名;
sort -t: -k 3 /etc/passwd | cut -d: -f 1 | tail -n 1

4、如果用户root存在,显示其默认的shell程序;
  id root &> /dev/null && grep “^root\>” /etc/passwd | cut -d: -f7

5、找出/etc/passwd中的两位或三位数;
  grep “\<[0-9]\{2,3\}\>” /etc/passwd –color=auto
6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行;
grep “^[[:space:]]\+[^[:space:]]” /etc/rc.d/rc.sysinit
7、找出”netstat -tan”命令的结果中以’LISTEN’后跟0、1或多个空白字符结尾的行;
   netstat -tan | grep “LISTEN[[:space:]]*$”

8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
         grep “^\([[:alnum:]]\+\>\).*\1$” /etc/passwd
9、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
grep -v “/sbin/nologin$” /etc/passwd
10、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
grep “/bin/bash$” /etc/passwd

11、找出/etc/passwd文件中的一位数或两位数:

grep –color=auto “\b[0-9]\{1,2\}\b” /etc/passwd

12、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
grep “^[:space:]\+[^[:space:]]” /boot/grub/grub.conf

13、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
grep “^#.*[:space:]\+[^[:space:]]” /boot/grub/grub.conf

14、使用echo命令输出一个绝对路径,使用grep取出其基名;
echo “/etc/passwd/” | grep -o “[[:alpha:]]\+” | tail -n
1扩展:取出其路径名
echo “/etc/passwd” | sed ‘s@[^/]\+/\?$@@’

 例题:

1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用三种方式)
egrep “^[sS]” /proc/meminfo
       egrep -i “^s” /proc/meminfo
       egrep “^(s|S)” /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行;
  egrep -v “/bin/bash$” /etc/passwd
3、显示/etc/passwd文件中ID号最大的用户的用户名;
sort -t: -k 3 /etc/passwd | cut -d: -f 1 | tail -n 1
4、如果用户root存在,显示其默认的shell程序;
id root &> /dev/null && egrep “^root\>” /etc/passwd | cut -d: -f7
5、找出/etc/passwd中的两位或三位数;
egrep “\<[0-9]{2,3}\>” /etc/passwd
6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行;
egrep “^[[:space:]]+[^[:space:]]” /etc/rc.d/rc.sysinit
7、找出”netstat -tan”命令的结果中以’LISTEN’后跟0、1或多个空白字符结尾的行;
netstat -tan | egrep “LISTEN[[:space:]]*$”
8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
egrep “^([[:alnum:]]+\>).*\1$” /etc/passwd
9、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
egrep -v “/bin/nologin” /etc/passwd
10、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
egrep “/bin/bash” /etc/passwd
11、找出/etc/passwd文件中的一位数或两位数;
egrep “\b[0-9]{1,2}\b” /etc/passwd

12、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
egrep “[:space:]+[^[:space:]]” /boot/grub/grub.conf

13、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
egrep “^#+[:space:]+[^[:space:]]” /boot/grub/grub.conf

14、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;
egrep “^#.*[:space:]+[^[:space:]]” /boot/grub/grub.conf
15、使用echo命令输出一个绝对路径,使用grep取出其基名;
echo “/etc/passwd/” | egrep -o “[[:alpha:]]+” | tail -n 1
扩展:取出其路径名
echo “/etc/passwd” | sed ‘s@[^/]\+/\?$@@’
16、显示当前系统root、centos或user1用户的默认shell和UID;
egrep ‘^(root|centos|user1)\>’ /etc/passwd | cut -d: -f1,3,7
17、找出/etc/rc.d/init.d/functions文件(centos6)中某单词后面跟一个小括号的行;
egrep -o “^[_[:alpha:]]+\(\)” /etc/rc.d/init.d/functions

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/86847

(1)
上一篇 2017-09-10 19:10
下一篇 2017-09-10 20:27

相关推荐

  • 文本处理工具sed

    处理文本的工具sed     stream EDitor,行编辑器     sed是一种流编辑器,他一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为“模式空间”(pattern space),接着用sed命令处理缓存区中的内容,处理完成后,把缓冲区的内容送往屏幕。…

    Linux干货 2016-08-10
  • 计算机组成及功能简介

    计算机(computer)       当今它已经走进千家万户,应用在各个领域,没有用过计算机的朋友应该很少了吧?但是,你真正了解计算机是什么吗?(我也是刚刚了解的,(*^__^*)嘻嘻……)那么,接下来,让我们一起探究一下它的具体构造吧!       所谓的计算机就是…

    Linux干货 2016-10-25
  • 性能调优概述

    大纲: 一、概述 二、什么是性能调优?(what) 三、为什么需要性能调优?(why) 四、什么时候需要性能调优?(when) 五、什么地方需要性能调优?(where) 六、什么人来进行性能调优?(who) 七、怎么样进行性能调优?(How) 八、总结 注,硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作…

    Linux干货 2015-02-10
  • 联通电信双链路内网VRRP+BFD&&PPTP+MYSQL+FreeRadius实现IDC堡垒机连接IDC机房

    一、具体需求与实现 1、多wan:两条宽带接入链路,使用VRRP+BFD技术,实现链路冗余; 2、IDC机房远程管理和登录限制:使用PPTP+freeRadius+mysql实现VPN,限制指定网段或IP进行拨号认证登录IDC机房,并编写脚本检查非法用户登录IDC机房服务器情况; 3、内网VLAN划分:利于安全管理、IP分流和带宽限制; 4、内网监控:使用N…

    Linux干货 2016-08-22
  • N22-妙手-第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥:         一种网络设备,负责网络桥接,将网络的多个网段在数据链路层连接起来。     集线器: &…

    Linux干货 2016-11-07
  • 小东北Eric的学习宣言

      大家好,我是网络班24期新加入的学员,之前工作了几年,一直没有找到一个很明确的工作方向,现在终于可以有一个很明确的努力方向啦,那就是跟着马哥,成为技术大牛,听马哥说过,键盘敲烂,月薪两万,为了这个目标,并且努力超越它,加油!冲!冲!冲!

    Linux干货 2016-10-19