grep正则表达式
什么是grep grep全名是Global seach REgular expressionand Print out the line.(全面搜索正则表达式并且显示出来),是一种强大的文本搜索工具,根据用户的文本模式(搜索条件)对目标文件进行逐行搜索,并显示能匹配到(或者不匹配)的行或文本。 既然grep是全面搜索正则表达式并显示,那正则表达式是什么呢? 正则表达式 正则表达式,(英语:RegularExpression,在代码中常简写为regex、regexp或RE),是一类字符所书写的模式,其中许多字符不表示字意义,而是表达控制或通配的功能。 正则表达式是由普通的字符和元字符组成,所谓元字符就是不表示其字面意义,而用额外功能性描述。正则表达式的搜索能力是由程序实现的,所以处理正则表达式的工具又称为正则表达式引擎。很多语言都支持正则表式,只是所支持方式略有不同而已。 正则表达式分为基本正则表达式和扩展正则表达式,不同的扩展正表达式支持功能多一点,grep支持基本正则表达式,egrep(grep -E) 支持扩展正则表达式,而fgrep不支持正则表达式。 基本正则表达式(grep) 语法格试: grep[OPTIONS]... PATTERN [FILE...] 基本正则表达式的元字符 1,字符匹配: .: 匹配任意单个字符 []: 匹配指定范围内的任意单个字符 [^]: 匹配指定范围外的任意单个字符 [0-9],[[:digit:]] : 匹配单个数字 [a-z],[[:lower:]] : 匹配单个小字字母 [A-Z],[[:upper:]] : 匹配单个大字字母 [a-zA-Z],[[:alpha:]] : 匹配单个不区分大小写的字母 [0-9a-zA-Z],[[:alnum:]] : 匹配简个数字或不区分大小写的字母 [[:space:]]: 匹配单个空白字符,包括空格,tab [[:punct:]]: 匹配单个标点符号 2,次数匹配元字符:用于实现指定其前的字符所能够出现的次数 *:任意长度,它前面的字符可以出现任意次 ?:0次或1次,它前面的字符是可有可元的 {m}:它前面的字符要现m次 {m,n}:它前面出现的字符至少m次,最多n次 {m,}:它前面出现的字符至少m次 {0,n}:它前面出现的字符最多n次 .*:匹配任意长度的任意字符 +:它前面出现的字符1次以上 3,位置锚定: ^:行首锚定:写在模式最左侧 $:行尾锚定:写在模式最右侧 ^$:空白行 &;,b:词首锚定,出现于单词左侧 &;,b:词尾锚定,出现于单词右侧 注意:不包含特殊字符的连续字符组成叫单词 4,分组 (): 比如 (bash) 分组中的模式匹配到内容,可由正则表达式引擎记忆在内存中,之后可以被引用 5,引用 #:引用前面的第#个左括号以及与与其匹配右括号中的模式所匹配到的内容 |:比如,a|b a或者b 扩展正则表达式(egrep) 语法格式: egrep[option]... 'PATTERN' FILE... grep-E 扩展正则表达式元字符: 1,字符匹配 .:匹配任意单个字符 [ ] : 匹配指定范围内的任意单个字符 [^]: 匹配指定范围外的任意单个字符 2,次数匹配
*:任意长度,它前面的字符可以出现任意次 ?:0次或1次,它前面的字符是可有可元的 +:它前面出现的字符1次以上 {m}:它前面的字符要现m次 {m,n}:它前面出现的字符至少m次,最多n次 {m,}:它前面出现的字符至少m次 {0,n}:它前面出现的字符最多n次 3,位置锚定: ^:行首锚定:写在模式最左侧 $:行尾锚定:写在模式最右侧 ^$:空白行 &;,b:词尾锚定,出现于单词右侧 4,分组 ():分组 |:或 5,引用: #:引用前面的第#个左括号以及与与其匹配右括号中的模式所匹配到的内容 grep,egrep 命令选项 -o:仅显示匹配的字串,而非字串所在的行 -v:反向选取 -i:ignore-case,忽略字符大小写 -A:-A #,显示匹配到的行,还要显示匹配到的行下面#行 -B:-B #,显示匹配到的行,还要显示匹配到的行上面#行 -C:-C #,显示匹配到的行,还要显示匹配到的行各上下#行 --color=auto:匹配到的内容,默认以红色显示 举例: 1,显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户 # grep "/sbin/nologin" -v/etc/passwd | cut -d: -f1 2,显示/etc/passwd文件中其默认shell为/bin/bash的用户,仅显示上述结果中ID号最大的用户 # grep '/bin/bash' /etc/passwd | sort -t:-k3 -n | tail -1 |cut -d: -f1 3,找出/etc/passwd文件中的一位数或两数 # grep -E --color "&;[0-9]{1,2}&;" /etc/passwd 4,显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后还跟至少一个非空白字符 # grep -E"^#[[:space:]]+[^[:space:]]+" /etc/rc.d/rc.sysinit --color 5,找出当前系统上其用户名和默认shell相同的用户 # grep -E --color"^(&;[[:alpha:]]+[[:alnum:]]*&;).*1$" /etc/passwd 6,找出/etc/rc.d/init.d/functions 文件中某单词后跟一组小括号"()"行: # grep-E --color -o"&;[[:alpha:]]+&;()" /etc/rc.d/init.d/functions 7,使用echo 命令输出一个路径,而后使用grep取出其基名 echo "/etc/sysconfig/network" |grep -o -E "[^/]+/?$" | cut -d/ -f1 8,写一个模式,能匹配合理的ipv4地址(1.0.0.1-239.255.255.254) ifconfig | grep -o -E "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-3][0-9])(.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){2}.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |