正则表达式
正则表达式RE
重要的文本处理工具:vim、sed、awk、grep
什么是正则表达式?
正则表达式(regular expression,RE)是一种字符模式,用于查找过程中匹配指定的字符。
在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/ 就是由正斜杠界定的正则表达式,
它将匹配被查找的行中任何位置出现的相同模型。在正则表达式中,元字符是最重要的概念。
匹配数字: ^[0-9]+$ 匹配以[0-9]范围中数字开头 “+”:前面的对象出现一次到多次 $以什么结尾。 123 456 4y5
匹配Mail: [a-z0-9_]+@[a_z0-9]+\.[a-z]+ nanruosen@126.com
是指数字或者字母或者_ 这些字符
匹配IP: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 0-9出现一到三次
或
[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}
digit 英 [ˈdɪdʒɪt] 数字; (从 0 到 9 的任何一个)数位; [man grep]
num1=123 [[ "$num1" =~ ^[[:digit:]]+$ ]] && echo "number" || echo "error"
元字符
定义:元字符是这样一类字符,它们表达的是不同于字面本身的含义
shell元字符(也称为通配符)。由shell来解析,如rm -rf *.pdf , 元字符 * Shell将其解析为任意多个字符
正则表达式元字符 由各种执行模式匹配操作的程序来解析,比如vi、grep、sed、awk、python
# *匹配所有以pdf结尾文件 rm -rf *.pdf # *前面的字符出现0次到多次 grep 'c*' /etc/passwd # +号至少需要出现一次 grep 'c\+' /etc/passwd egrep 'c+' /etc/passwd # +号是扩展元字符 # vim示例 % 全文 1,$ 第一行到最后一行 \< \> 词首和词尾的限制,可以出现符号,不能出现字母 Tom、anatomy、tomatoes及tomorrow :1,$ s/\<[tT]om/TOM/g :%s/\<[tT]om\>/TOM/g
正则表达式元字符
基本正则表达式元字符
元字符 | 功能 | 示例 |
^ | 行首定位符 | ^root |
$ | 行尾定位符 | root$ |
. | 匹配单个字符 | r..t |
* | 匹配前导符0到多次 | ro*t |
.* | 任意多个字符 | |
[] | 匹配指定范围内的一个字符 | [Rr]oot |
[ - ] | 匹配指定范围内的一个字符 | [a-z0-9]root |
[^ ] | 匹配不在指定组内的字符 | [^a-z]root |
\ | 用来转义元字符 | root\. |
\< | 词首定位符 | \<root |
\> | 词尾定位符 | root\> |
\(..\) | 匹配稍后使用的字符的标签 |
:%s/192.168.128.200/192.168.128.300/ :%s#\(192.168.128.\)200#\1300# :%s/\(192.\)\(168.\)\(128.\)200/\1\2\3300/ :16,19 s/\(.*\)/#\1/ #注释对应行 |
x\{m\} | 字符x重复出现m次 | o\{5\} |
x\{m,\} | 字符x重复出现m次以上 | o\{5,\} |
x\{m,n\} | 字符x重复出现m到n次 | o\{5,10\} |
扩展正则匹配元字符
元字符 | 功能 | 示例 |
+ | 匹配一个或多个前导字符 | ro+t |
? | 匹配零个或一个前导字符 | ro?t |
a|b | 匹配a或b | root|nan |
() | 组字符 | root|nan cn(blo|nan)gs+ gs+ (gs)+ |
(...)(...)\1\2 | 标签匹配字符 | (192.168.128.)200\1300 |
x{m} | 字符x重复m次 | o{5} |
x{m,} | 字符x重复至少m次 | o{5,} |
x{m,n} | 字符x重复m到n次 | o{5,10} |
POSIX字符类
表达式 | 功能 | 示例 |
[:alnum:] | 字母与数字字符 | [[:alnum:]]+ |
[:alpha:] | 字母字符(包括大小写字母) | [[:alpha:]]{4} |
[:blank:] | 空格与制表符 | [[:blank:]]* |
[:digit:] | 数字字母 | [[:digit:]]? |
[:lower:] | 小写字母 | [[:lower:]]{5,} |
[:upper:] | 大写字母 | [[:upper:]]+ |
[:punct:] | 标点符号 | [[:punct:]] |
[:space:] | 包括换行符,回车等在内的所有空白 | [[:space:]]+ |
正则匹配示例 vim
/love/ /^love/ /love$/ /l.ve/ /lo*ve/ /[Ll]ove/ /love[a-z]/ /love[^a-zA-Z0-9]/ /.*/ 整行 /^$/ 空行 /^[A-Z]..$/ /^[A-Z][a-z]*5[0-3]/ /[a-z]*\./ /^ * [A-Z][a-z][a-z]$/ /^[A-z]*[^,][A-z]*$/ /\<fourth\>/ /\<f.*rth\>/ /5{2}3{2}\./ 空行 /^$/ /^[ \t]*$/ 注释行 /^#/ /^[ \t]*#/ :1,$ s/\([Oo]ccur\)ence/\1rence/ :1,$ s/\(square\) and \(fair\)/\2 and \1/
本文作者:南哈哈
本文链接:https://www.cnblogs.com/nanruosen/p/16482911.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步