Linux grep正则表达式的用法,学好即可旁通其他语言正则表达式
编辑:狂族晨曦 来源:脚本编程,系统运维,经验杂笔 日期:2016-05-15 阅读: 3,863 次 9 条评论 » 百度已收录
先森培训红帽Linux之前,得知要也会教正则表达式,先森是感到非常高兴的。因为在先森的印象中,正则表达式是非常难懂难学的,既然有教,一定要学好。本来已经做好面对困难的决心,直到老师教grep正则表达式的时候才发现,原来这么简单。而且老师也说了,只要学会了用grep正则表达式,学习java等其他语言的正则表达式也就简单了。
redhat linux grep
下面先森对自己的学习做一个总结,毕竟代码总是易忘的。本文叙述的是用grep来使用正则表达式,实际上Linux使用正则表达式的命令工具不止于此。
Linux grep命令
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep很有使用价值,先森在学习之后就在《用Linux分析日志查看产生大量404的IP》一文中有过应用。
grep按下述方式接受选项和参数:
grep [options] regex [files]
其中options是以下的选项,regex是正则表达式,files是需要进行搜索的文本文件。gerp支持的选项如下:
-
-a 不要忽略二进制数据。
-
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-
-c 计算符合范本样式的列数。
-
-C<显示列数>或-<显示列数> 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-
-e<范本样式> 指定字符串作为查找文件内容的范本样式。
-
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-
-F 将范本样式视为固定字符串的列表。
-
-G 将范本样式视为普通的表示法来使用。
-
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-
-H 在显示符合范本样式的那一列之前,标示该列的文件名称。
-
-i 忽略字符大小写的差别。 -l 列出文件内容符合指定的范本样式的文件名称。
-
-L 列出文件内容不符合指定的范本样式的文件名称。
-
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-
-q 不显示任何信息。
-
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-
-s 不显示错误信息。
-
-v 反转查找。
-
-w 只显示全字符合的列。
-
-x 只显示全列符合的列。
-
-y 此参数效果跟“-i”相同。
-
-o 只输出文件中匹配到的部分。
-
--color:以特定颜色高亮显示匹配关键字
--color选项可以让搜索匹配结果高亮,是个很有用的选项。
需要注意的是,grep命令使用正则表达式分为基本正则表达式和扩展正则表达式。我们一般使用"grep -E"或者"egrep"来使用扩展正则表达式。扩展正则表达式的功能更加强大。
命令中加入正则表达式时,最好使用引号将表达式括起来,以避免shell的元字符对正则表达式的影响。
基本正则表达式
正则表达式的学习,主要就是对各种字符的作用进行学习,使用中则主要是将各种功能的字符进行组合,以达到我们的目标匹配。虽然grep正则表达式分为基本正则表达式和扩展表达式,但基本表达式已经能满足我们的基本需求了。下面来介绍一下各种正则表达式字符:
符号 | 含义 | 举例 |
^ | 开始标记 | "^abc"满足的例子abc、abcd |
^ | 非(在[]内) | "[^abc]"满足的例子:ddd、mpd |
$ | 结束标记 | "abc$"满足的例子abc、mmabc |
\< | 匹配单词开始 | "\<abc"满足的例子abc、abcd |
\> | 匹配单词结束 | "abc\>"满足的例子abc、pmrabc |
. | 任意一个字符 | "a.c"满足的例子abc、fapcc |
* | 匹配前一个字符≥0次 | "abc*"满足的例子abbb(c出现0次)、abcdk |
\ | 转义字符 | "\."满足的例子192.168 |
[] | 匹配一系列字符中的一个 | "[abc]"满足的例子any、boy、ico |
- | 连字符,用在[]中,规定匹配范围 | [a-z]匹配小写字母,[0-9]匹配数字,[0-9a-zA-Z]匹配数字与字母 |
{} | {m}、{m,n}、{m,}、{,n}分别为匹配前一个字符m次、m到n次、≥m次、≤n次 |
"abc\{3,5\}"满足的例子abcccc、abcccccc 注意,由于{ }在SHELL中有特殊意义,因此作为正则表达式用的时候要用\转义一下(若用egrep则不转义)。 |
扩展正则表达式
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式。所以grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。
扩展正则表达式就是在基本正则表达式的基础上,增加了一些匹配字符。
符号 | 含义 | 举例 |
+ | 匹配前一个字符≥1次 | "abc+"满足的例子abcd、abcccdd |
? | 匹配前一个字符0或1次 | "abc?"满足的例子ab、mabcd |
| | 或 | "AAA|BBB"满足的例子AAA、BBBpp |
() |
匹配整个括号内的字符串(原来都是匹配单个字符) |
"g(oo|la)d"满足的例子good、glad |
() | 反向引用,最多使用9次,用\*调用(*代表1-9),以左括号确定编号 | "([a-z]+)([0-9]+)\1\2\1"(\1引用第一个括号内的匹配结果,\2引用第二个括号的匹配结果)满足的例子abc12abc12abc、a1a1a(注:a1a2c则不满足) |
最后
相对而言,grep正则表达式还是非常简单的。需要注意的是,花括号{}在grep中使用需要加反斜杠\转义,而在grep -E或egrep中则不用转义。
转载请注明出处来自https://www.capjsj.cn/linux_grep_zzbds.html
正则表达式万变不离其宗
你们这做技术的太牛了,写的这些完全看不懂啊!
最烦的就是这些东西呀
@纯洁博客: 但是确实好用啊
正则参数这么多,看着都晕0.0
一直不是很懂正则表达式。看很多时候都会用到的。
太难掌握了~~
以前学Java时用过,现在都还给老师了。
正则的确很强大~