Loading... <p style="text-align: left;line-height: normal"><strong><span style="font-family: 宋体, SimSun">正则表达式:</span></strong></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> 又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。是一类字符所书写的模式,其中许多字符(元字符)不表示其字面意义,而是表达控制或通配等功能。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。</span></p> <p style="line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 11px">语法:</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> grep [OPTIONS] PATTERN [FILE…]</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 11px"> 如:/etc/passwd中以root开头的行,及其后面的两行</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703160001-14.png" title="1427792101104073.png" alt="blob.png" /></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -A 2为OPTIONS,命令选项;^root为PATTERN,其中root为字面意思,^为元字符;/etc/passwd为FILE</span></p> <p style="text-align: left;line-height: normal"><strong><span style="font-family: 宋体, SimSun">正则表达式分类:</span></strong></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"><span style="font-family: 宋体, SimSun;font-size: 12px"> 根据元字符数量及功能的不同分为基本正则表达式(grep)、扩展正则表达式(egrep)。</span>grep和egrep都是文本搜索工具,可根据用户指定的文本模式(搜索条件,即:文本+元字符)对目标文件进行逐行搜索,显示能匹配到的行;用法上grep -E等同于egrep。此外还有一个文本搜索工具fgrep,不支持正则表达式,没有自己的元字符,不做详细解释。</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 12px"> 在搜索工具中,元字符起到至关重要的作用;元字符即,不表示其字面意义,而用于额外功能性描述。</span></p> <p><strong><span style="font-family: 宋体, SimSun">正则表达式元字符:</span></strong></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun"> <strong><span style="font-family: 宋体, SimSun;font-size: 14px">grep元字符:</span></strong></span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 1.字符匹配:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> .: 匹配任意单个字符</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> []: 匹配指定范围内的任意单个字符</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [0-9], [[:digit:]]</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [a-z], [[:lower:]]</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [A-Z], [[:upper:]]</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [[:space:]]匹配空白字符,包括空格,tab…</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> Space characters (such as space, tab, and formfeed, to name a few).</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> tab, newline, vertical tab, form feed, carriage return, and space. </span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [[:punct:]]匹配任意标点符号:: '! " # $ % & ' ( ) * + , – . / : ; < = > ? @ [ \ ] ^ _ ' { | } ~'. </span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> Punctuation characters (characters that are not letter, digits, control characters, or space characters).</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [[:alpha:]]字母数字符</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> Alphabetic characters.</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [[:alnum:]]匹配任何字母 </span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> Alphanumeric characters.</span></p> <p style="text-align: left;line-height: 1.75em;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [^]:代表本表达式不匹配"[]"内出现的字符</span><span style="font-family: 宋体, SimSun;font-size: 10px;text-indent: 2em"></span></p> <p style="text-align: left;line-height: 1.5em"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 2.次数匹配元字符:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 用于实现指定其前面的字符所能够出现的次数</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> *: 任意长度,它前面的字符可以出现任意次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \?: 0次或1次,它前面的字符是可有可无的</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \{m\}: m次,它前的字符要出现m次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \{m,n\}: 至少m次,至多n次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \{m,\}:至少m次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \{0,n\}: 至多n次</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> .*:任意长度的任意字符</span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 3.位置锚定:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> ^: 行首锚定;写在模式最左侧</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> $: 行尾锚定:写在模式最右侧</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> ^$: 空白行</span></p> <p><span style="font-family: 宋体, SimSun;font-size: 10px"></span><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 4.分组:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \(\)</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 例如:\(ab\)*</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用</span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 5.引用:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 例如\(ab\(x\)y\).*\(mn\)</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 有编号:自左而后的左括号,以及与其匹配右括号</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \(a\(b\(c\)\)mn\(x\)\).*\1</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \#: 引用第n个括号所匹配到的内容,而非模式本身</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 例如:</span> <img src="//cto.wang/usr/uploads/2016/07/20160703160001-89.png" title="1427883059584832.png" alt="blob.png" /></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 引用第一个分组的内容为\(w\(es\)t\)</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 引用第二个分组的内容为\(es\)</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 也可以看出正则表达式是工作在贪婪模式下,会尽可能多的匹配</span></p> <p><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 6.补充:</span></strong></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 不包含特殊字符的连续字符组成的串叫单词:</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \<: 词首,出现于单词左侧,\b</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 如:\<char</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \>: 词尾,出现于单词右侧, \b</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> 如:char\></span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun"><strong><span style="font-family: 宋体, SimSun;font-size: 14px"> egrep元字符:</span></strong></span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 1.字符匹配:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> .:任意单个字符</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> []:匹配范围内的任意单个字符</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> [^]:匹配范围外的任意单个字符</span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 2.次数匹配:</span></strong></p> <p><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"></span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> *:任意次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> ?: 0次或1次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> +: 至少1次;</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> {m}: 精确匹配m次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> {m,n}: 至少m次,至多n次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> {m,}:至少m次</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> {0,n}:至多n次</span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 3.锚定:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> ^:行首</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> $:行尾</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> ^$, ^[[:space:]]*$:空白行</span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 4.分组:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> ()</span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 5.引用:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \1, \2, \3</span></p> <p><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 6.或者:</span></strong></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> a|b: a或者b</span></p> <p style="text-align: left;line-height: normal;text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> con(C|c)at</span></p> <p style="text-align: left;line-height: normal"><strong style="font-family: 宋体, SimSun"><span style="font-size: 10px"> 7.补充</span></strong></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \<, \b</span></p> <p style="text-indent: 2em"><span style="font-family: 宋体, SimSun;font-size: 10px"> \>, \b</span></p> <p><span style="font-family: 宋体, SimSun"><strong><span style="font-family: 宋体, SimSun;font-size: 14px"> grep与egrep区别</span></strong></span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> grep的扩充版本, 改良了许多传统 grep 不能或不便的操作. 比方说:</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可.</span></p> <p style="text-align: left;line-height: normal"> <img src="//cto.wang/usr/uploads/2016/07/20160703160001-95.png" title="1427882995429348.png" alt="blob.png" /></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对, 但 egrep 则可.</span><span style="font-family: 宋体, SimSun;font-size: 10px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703160001-15.png" title="1427883234107239.png" alt="blob.png" /></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> grep 在处理 {n,m} 时, 需用 \{ 与 \} 处理, 但 egrep 则不需.</span><span style="font-family: 宋体, SimSun"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703160001-63.png" title="1427883443101837.png" alt="blob.png" /></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun"><strong><span style="font-family: 宋体, SimSun;font-size: 14px"> fgrep:特别搜索</span></strong></span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> 无元字符,字符表示字面意思。</span></p> <p style="text-align: left;line-height: normal"><strong><span style="font-family: 宋体, SimSun">命令选项:</span></strong></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -v: 反向选取,即不包含</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -o: 仅显示匹配的字串,而非字串所在的行</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -i: ignore-case,忽略字符大小写</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -E: 支持使用扩展正则表达式</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -A #:Print NUM lines of trailing context after matching lines.</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -B #:Print NUM lines of leading context before matching lines.</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px"> -C #:Print NUM lines of output context. Places a line containing a group separator (–) between contiguous groups of matches.</span></p> <hr /> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px">根据马哥随笔,参考(http://www.178linux.com/archives/1198、http://blog.sina.com.cn/s/blog_51dc0fba0100lqu8.html)及度娘整理。</span></p> <p style="text-align: left;line-height: normal"><span style="font-family: 宋体, SimSun;font-size: 10px">初次发博客,如有遗漏、错误烦请告知~</span></p> <hr /> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信