正则表达式
正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定的字符串。
这里不得不提的是shell三剑客:grep,sed,awk。
一、grep和元字符
grep [选项] [查找条件(正则)] [目标文件]
-E:开启扩展的正则表达式
-c:计算找到'搜寻字符串'的次数
-i:忽略大小写的不同,所以大小写视为相同
-o:只找到这个关键字就可以
-v:反向选择,即输出没有匹配到的那些字符
--color=auto:可以将找到的关键词部分加上颜色的显示!
-n:顺便输出行号
-w:表示精确匹配一个字符-q :静默
-R : 可以查找目录下面的文件
-B2 : 前两行
-A2 : 后两行
-C2 : 上下两行
egrep [选项] [查找条件] [目标文件]
-l : 只要文件名
-n : 带行号
元字符定义
元字符是在正则表达式中具有特殊含义的字符,用于定义搜索模式中字符的出现方式和位置。
元字符使得正则表达式能够以更灵活和动态的方式来匹配文本。在实际应用中,我们经常需要结合记忆、示例学习和案例练习来熟练掌握它们的使用。通过不断实践,我们可以构建出复杂的正则表达式,以高效地处理文本匹配和数据提取任务。
分类:
- 数量元字符:
*
表示前一个字符可以出现0次或多次;+
表示前一个字符至少出现1次;?
表示前一个字符出现0次或1次;花括号{n}
用来指定前一个字符或组合的确切重复次数。- 边界元字符:
^
表示行的开头;$
表示行的结尾;这些元字符帮助我们定位特定的字符串位置。- 字符类元字符:
.
用来匹配任意单个字符(除了换行符);方括号[]
用来定义一个字符集合,匹配其中任一字符;而[^]
则是排除特定字符的集合。- 选择元字符:竖线
|
用作“或”操作,允许选择两个正则表达式中的一个进行匹配。- 分组元字符:圆括号
()
用于将多个字符作为一个整体进行处理,它们通常与数量元字符一起使用来指定组的出现次数。
1.基本正则表达式元字符串:
- ^ :行首定义符
- grep ^root /etc/passwd
- $ :行尾定义符
- grep root$ /etc/passwd
- . :匹配任意单个字符
- grep r.t /etc/passwd
- * :匹配前导符0次到多次
- grep " ro* " /etc/passwd (配合左侧的字符)
- .* : 匹配任意多个字符
- grep " .* " /etc/passwd
- [ ] : 匹配指定范围内的一个字符
- grep " [rR]oot " /etc/passwd
- [-] : 匹配指定范围内的一个字符,连续的范围
- grep "[a-z]oot" /etc/passwd
- [^] : 匹配不在指定组内的字符
- grep "[^a1?/]" /etc/passwd (排除中括号内的所有字符,只取除这些字符外的所有字符的结果)
- \ : 用来转义元字符(' ' " " \),脱意符。(\应该在需要被转义字符的左侧
- grep "r.\ot" /etc/passwd
- \< : 词首定位符
- grep " \<root " etc/passwd (只查询以root开头的)
- \> : 词尾定位符
- 同上,意思相反的啦
- ( ) : \(..\) 匹配稍后使用的字符的标签
- (:3,9 s/\(.*\)/#\1/ 加注释)
- x\{m\} : 字符x重复出现m次
- grep r" \{o\} " etc/passwd
- x\{m,\}
- grep r" o\{2}\ "t etc/passwd
- x\{m,n\}
- grep r" o\{3,4\} "t etc/passwd
2.扩展正则表达式元字符串(egrep扩展支持正则)
- + : 匹配1~n个前导字符
- egrep ro+ot /etc/passwd
- ? : 匹配0~1个前导字符
- egrep "ro*ot" /etc/passwd
- a|b : 匹配 a 或 b
- egrep " o|o " /etc/passswd
- (): 组字符
- egrep "r(o|ot)" /etc/passwd