1. 什么是正则表达式
正则表达式(Regluar Expressions)又称规则表达式,这个概念最初是由Unix中的工具软件(如sed 和 grep)普及开的。正则表达式在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语言。 许多程序设计语言都支持通过正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。

2. 正则表达式能做什么
正则表达式的主要应用对象是文本,使用正则表达式可以指定想要匹配的字符串规则,然后通过这个规则来匹配、查找、替换或切割那些符合指定规则的文本。总体来讲,正则表达式可以对指定的文本实现以下功能:

匹配验证: 判断给定的字符串是否符合正则表达式所指定的过滤规则,从而可以判断某个字符串的内容是否符合特定的规则(如email地址、手机号码等);当正则表达式用于匹配验证时,通常需要在正则表达式字符串的首部和尾部加上^和$,以匹配整个待验证的字符串。

查找与替换: 判断给定字符串中是否包含满足正则表达式所指定的匹配规则的子串,如查找一段文本中的所包含的IP地址。另外,还可以对查找到的子串进行内容替换。

字符串分割与子串截取: 基于子串查找功能还可以以符合正则表达式所指定的匹配规则的字符串作为分隔符对给定的字符串进行分割。

正则中普通常用的元字符

正则中其他常用元字符 

扩展类正则常用元字符 

 基础正则表达式

1.查找特定字符串

grep -n 'the' 文件名

 利用中括号[]来查找集合字符

grep -n 't[ae]st' 文件名

这样就会在文件中寻找包含tast和test关键字的行。

利用集合字符的反向选择[^]排除不想要的关键字前缀:

grep -n '[^g]oo' 文件名

这样就可以选出含oo关键字但oo前又不是g的行。

如果是oo前不想要有小写字母,可以写成:

grep -n '[^a-z]oo' filename或者grep -n '[^[:lower:]]oo' 文件名

如果想要包含数字的行,可以写成:

grep -n '[0-9]' filename或者grep -n '[:digit:]' 文件名

行首与行尾字符^$

查找文件中the开头的行:grep -n '^the' 文件名

查找文件中小写字母开头的行:

grep -n '^[a-z]' 文件名或grep -n '^[[:lower:]]' 文件名

不想要开头是英文字母的行:

grep -n '^[^a-zA-Z]' 文件名或grep -n '^[^[:alpha:]]' 文件名

找出小数点结尾的行:

grep -n '\.$' filename,因为.是特殊字符,所以需要用\进行转义。

找出空白行:grep -n '^$' 文件名

不要空白行,也不要开头是#的行,用来查看配置文件的有效配置很有用:

grep -v '^$' /etc/ssh/ssh_config | grep -v '^#'

任意一个字符.与重复字符*

.(小数点):代表一定有一个任意字符的意思;

*(星号):代表重复前一个0到无穷多次的意思,为组合形态;

需要找出包含g??d的字符串:grep -n 'g..d' 文件名

需要找出两个o以上的字符串:grep -n 'ooo*' 文件名

找出字符串开头与结尾都是g,但是两个g之间仅能存在至少一个o的字符串:

grep -n 'goo*g' 文件名

找出字符串开头与结尾都是g,两个g中间的字符可有可无:

grep -n 'g.*g' 文件名

限定连续RE字符范围{}

因为{与}的符号在shell中是有特殊意义的,因此,必须要使用转义字符\让他们失去特殊意义。

找出包含至少2个o的字符串:grep -n 'o\{2\}' 文件名

找出g后面包含2-5个o再接一个g的字符串:grep -n 'go\{2,5\}g' 文件名

找出g后面包含2个o及以上再接一个g的字符串:grep -n 'go\{2,\}g' 文件名

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐