如何使用正则表达式写出高效率的GREP
正则表达式可追溯到科学家对人类神经系统工作原理的早期研究。是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用: 1. 给定的字符串是否符合正则表达式的匹配 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 特点: 1. 灵活性、逻辑性和功能性非常的强; 2. 可以迅速地用极简单的方式达到字符串的复杂控制。 3. 对于刚接触的人来说,比较晦涩难懂。 正则表达式元字符使用方法: 匹配的关键点: 字符匹配,匹配次数,位置锚定,特殊符号、分组()与引用# 字符匹配: .: 配置任意单字符 [^]:取反,不包含,默认是一个字符长度 [ ]:范围内的任意字符 POSIX字符类: [:alnum:] 匹配字母和数字. 等价于A-Za-z0-9. [:digit:] 匹配(十进制)数字. 等价于0-9. [:alpha:] 匹配字母. 等价于A-Za-z. [:lower:] 匹配小写字母. 等价于a-z. [:upper:] 匹配大写字母. 等价于A-Z. [:space:] 匹配空白字符(空格和水平制表符). 匹配次数: . : 配置任意单字符 * : 任意长度,它前面的字符可以出现任意次 .* : 任意长度的任意字符 ? : 0次或1次,它前面的字符可有可无 {m,n}: 前面的字符至少出现m次,前面的字符至多出现n次 {m}: m次,前面的字符出现m次 {m,} : 前面的字符至少出现m次 {0,n}: 前面的字符至多出现n次 位置锚定:行和词 行: ^$:空白行 单词: 特殊符号: () :分组 | :或 分组与引用 () :分组 # :引用第#个括号所匹配到的内容,而非模式本身
格式:grep [option]...'PATTERN' FILE... grep命令选项 -i:--ignore-case 忽略大小写差别。 -v:--revert-match反选,只显示不匹配的行。 -o:仅显示匹配的字串,而非字符串所在的行 --color=auto:高亮显示 -E:支持使用 扩展正则表达式 -A #:显示匹配到的后#行 -B #:显示匹配到的前#行 -C #:显示匹配到的前后各#行 语法与释义: 基础语法"^([]{})([]{})([]{})$"
实例: 基本的正则表达式: 1、显示/proc/meminfo文件中以大写或小写S开头的行; # grep -i '^s' /proc/meminfo # grep '^[Ss]' /proc/meminfo # egrep '^(S|s)' /proc/meminfo 2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户; # grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1 3、显示/etc/passwd文件中其默认shell为/bin/bash的用户中UID号最大的用户; # grep "/bin/bash$" /etc/passwd | sort -t: -k3 -n |tail -1 | cut -d: -f1 5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep "^[[:space:]]{0,1}" /boot/grub/grub.conf # grep "^[[:space:]]?" /boot/grub/grub.conf 7、找出netstat-tan命令执行结果中以'LISTEN'结尾的行; # netstat -tan | grep "LISTEN[[:space:]]*$" 8、找出当前系统上其用户名和默认shell相同的用户; # grep "^([[:alnum:]]{1,}):.*1$" /etc/passwd 扩展的正则表达式: 1、找出/etc/rc.d/init.d/functions文件中某单词后跟一个小括号“()”行; # egrep -o "&;[[:alnum:]]+&;()"/etc/rc.d/init.d/functions 2、使用echo命令输出一个路径,而后使用grep取出其基名; #echo "/etc/sysconfig/" | egrep -o"[[:alnum:]]+/?" # echo "/etc/sysconfig/" | egrep ?o "[^/]+/?$"| cut -d/ -f1 3、显示本机ip地址: #ifconfig | egrep --color'(&;([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])&;.){3}(&;([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])&;)'
如何写出高效率的正则表达式: 使用正则表达式语法对于目标文本进行描述和界定,可以像画素描一样,先大致勾勒出框架,再逐步在局步实现细节。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |