正则表达式
一、grep(文本搜索工具):根据用户指定的模式,对目标文件进行过滤,显示被模式匹配到的行。 使用格式:grep [选项] ‘模式’ 文件名 -o 仅显示匹配到的内容,不会把正行输出 -v 反向选取,把没有匹配到的行显示出来 --color 高亮显示匹配到的内容 -i 忽略字符大小写 -E 使用扩展正则表达式 -A # 匹配模式及其下面#行 -B #匹配模式及其上面#行 -C #匹配模式及其上面#行和下面#行 模式(正则表达式):由一类字符书写的模式,其中有一些字符不表示字符字面的意义,而是表示通配功能。 1、基本正则表达式 元字符: . 匹配任意单个字符 [] 匹配指定集合内的任意单个字符 [0-9] [[:digit:]] 数字集合 [a-z] [[:lower:]] 小写字母集合 [A-Z] [[:upper:]] 大写字母集合 [a-zA-Z] [[:alpha:]] 大小写字母 [0-9a-zA-Z] [[:alnum:]] 数字和大小写字面集合 [[:space:]] 空白字符集合 [^] 匹配的是集合外的任意单个字符 例如[^[:lower:]]指的是除小写字母外的任意单个字符 2、匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定。 * 匹配其前面的字符任意次 grep ‘x*y’ xy xxy xxxy y ? 匹配其前面字符0此或一次 grep 'x?y' xy xxy y xxxxy aby + 匹配其前面字符至少出现一次 {m} 匹配其前面字符m次 grep 'x{2}y' xy xxy y aaxxy aby xxxy {m,n}:匹配其前面的字符至少出现m次,至多出现n次 x{3,5} 3、位置锚定 ^:行首锚定,写在模式的最左侧 例:显示/etc/fstab文件中以#开头的行 $:行尾锚定,写在模式的最右侧 例:显示/etc/fstab文件中以0结尾的行 ^$:空白行(连空格都没有) 例:显示/etc/fstab文件中的空白行 &; 词首锚定 例:&;open 以open开头的单词 &; 词尾锚定 &;单词&; 单词锚定 例:匹配/tmp/sort文件中的两位数 4、分组:() 后向引用:反向引用,指把匹配出来的组引用到表达式本身其它地方 () 1 2 选择字符:| 练习1、显示/proc/meminfo文件中以大写或小写S开头的行; 练习2、显示/etc/passwd文件中其默认shell为/sbin/nologin的用户; 练习3、显示/etc/passwd文件中其默认shell为/bin/bash的用户; 进一步:仅显示上述结果中其ID号最大的用户; 练习4、找出/etc/passwd文件中的一位数或两位数; 练习5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; 练习6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; 练习7、找出netstat -tan命令执行结果中以'LISTEN'(后可有空白字符)结尾的行; 练习8、添加用户bash,testbash,basher,nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户; 练习9、扩展题:新建一个文本文件,假设有如下内容: He like his lover. He love his lover. He like his liker. He love his liker. 找出其中最后一个单词是由此前某单词加r构成的行。 二、扩展正则表达式 egrep [选项] ‘模式’ 文件名 1、元字符 . 匹配任意单个字符 [] 匹配指定集合内的任意单个字符 [0-9] [[:digit:]] 数字集合 [a-z] [[:lower:]] 小写字母集合 [A-Z] [[:upper:]] 大写字母集合 [a-zA-Z] [[:alpha:]] 大小写字母 [0-9a-zA-Z] [[:alnum:]] 数字和大小写字面集合 [[:space:]] 空白字符集合 [^] 匹配的是集合外的任意单个字符 2、匹配次数:用于对其前面紧邻的字符所能出现的次数作出限定 * 匹配其前面的字符任意次 ? 匹配其前面字符0此或一次 + 匹配其前面字符至少出现一次 {m} 匹配其前面字符m此 {m,n}:匹配其前面的字符至少出现m次,至多出现n次 3、位置锚定 ^:行首锚定,写在模式的最左侧 $:行尾锚定,写在模式的最右侧 ^$ 空白行 &; 词首锚定 &; 词尾锚定 &;单词&;单词锚定 4、分组 () '([0-9]) ([a-z]) 1 2' | 选择字符 练习10:显示当前系统上root、centos或user1用户的默认shell及用户名; 练习11:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行; 练习12:使用echo输出一个路径,而使用egrep取出其基名; 练习13:找出ifconfig命令结果中的1-255之间的数值练习14:找出ifconfig命令结果中的IP地址;(ip范围1.0.0.1 - 223.255.255.254) ifconfig|grep --color '&;([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-3]).([0-9]|[1-9][0-9]||1[0-9][0-9]|2[0-5][0-5]).([0-9]|[1-9][0-9]||1[0-9][0-9]|2[0-5][0-5]).([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-4])&;' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |