为了能到远方,脚下的每一步都不能少.|

南哈哈

园龄:3年10个月粉丝:2关注:0

正则表达式

正则表达式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 中国大陆许可协议进行许可。

posted @   南哈哈  阅读(76)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起