正则表达式
正则表达式: 由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是表示控制和通配功能; 它可以分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep: 作用:文本搜索工具,根据用户指定的模式对目标进行匹配检查;打印匹配到的行; 正则表达式引擎: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] -i:ignorecase 忽略字符大小写 -o:仅显示匹配到的字符串本身; -v:显示不能被模式匹配到的行 -E:支持使用扩展的正则表达式元字符; -q:静默模式,即不输出任何信息 -A:后行 -B:前行 -C:前后各行 基本正则表达式字符: 字符匹配: .:匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 [:digit:] [:alnum:] [:lower:] [:upper:] [:alpha:] [:pucnt:] [:space:] 匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式; *:匹配任意长度的任意字符 ?:匹配其前面的字符0次或1c次;即其前面的字符是可有可无的; +:匹配其前面的字符1次或多次;即前面的字符出现至少1次; {m}:匹配其前面的字符m次 {m,n}:匹配其前面的字符至少m次,至多n次 {0,n}:至多n次 {m,}:至少m次 位置锚定: ^:行首锚定;用于模式的最左侧; $:行尾锚定;用于模式的最右侧; ^pattern$:用于pattern来匹配整行; ^$:空白行; ^[[:space:]]*$:空行或包含空白字符的行 单词:非特殊字符组成的连续字符(字符串)都成为单词; &;或b:词首锚定,用于单词模式的左侧; &;或b: 词尾锚定,用于单词模式的右侧; 分组及引用 ():将一个或多个字符捆绑在一起,当做一个整体进行处理; (xy)*ab
note:分组括号中模式匹配到的内容会被正则表达式引擎自动记录与内部的变量中,这些变量为 1:模式从左侧起,第一个左括号以及与之匹配的右括号直接的模式所匹配到的字符; 2: 3:
后向引用:引用前面的分组括号中的模式所匹配到的字符; egrep: 支持扩展的正则表达式实现类似于grep文本过滤功能:grep-E -i ,-o ,-v, -q, -A -B -C -G:支持基本正则表达式 扩展正则表达式元字符: 字符匹配 .:任意单个字符 []:指定范围内的任意个字符 [^]:指定范围外的任意个字符 次数匹配 *:任意次,0次或者多次 ?:0次或一次 +:至少1次 {m}:至少m次 {m,n}:至少m至多n
位置锚定 ^:行首锚定 $:行尾锚定 &;:词首锚定 &;:词尾锚定 分组引用 ():分组 或 a|b 例题 1、显示当前系统root、mage或wang用户的UID和默认shell 2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行 3、使用egrep取出/etc/rc.d/init.d/functions中其基名 4、使用egrep取出上面路径的目录名 5、统计以root身份登录的每个远程主机IP地址的登录次数 6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255 7、显示ifconfig命令结果中所有IPv4地址 1: [root@localhost ~]# egrep "^(root|mage|wang)&;.*" < /etc/passwd | cut -d: -f3,7 0:/bin/bash 1001:/bin/bash 1002:/bin/bash 2: [root@localhost ~]# egrep "^[[:alpha:]_]+().*" /etc/rc.d/init.d/functions checkpid() { 3. [root@localhost ~]# echo "/etc/rc.d/init.d/functions" | egrep -o "[^/]+?$" functions 4. [root@localhost ~]# echo "/etc/rc.d/init.d/functions" | egrep -o "^/.*/" /etc/rc.d/init.d/ 5. [root@localhost ~]# netstat -nt | tr -s " " "#" | cut -d"#" -f5 | uniq -c 1 servers) 1 Address 1 172.18.16.41:52384 1 10.1.250.39:51374 6.ifconfig | egrep "&;([01]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|2[0-5][0-5])&;" 7. [root@localhost ~]# ifconfig | egrep " netmask" | tr -s " " "+" | cut -d"+" -f3 172.18.16.8 127.0.0.1 192.168.122.1 8、用正则表达式表示手机号11 13 17 15 18 9、用正则表达式表示身份证号18 10、用正则表达式表示邮箱 8, [root@localhost ~]# cat txt | grep -E -o "b1[3587][0-9]{9,9}&;" 17715184033 15515184033 13312345678 15312345678 9, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |