详解linux正则表达式£¨基础正则表达式+扩展正则表达式£©

 更新时间£º2018年11月16日 09:04:59   作者£ºa©g锦衣卫   我要评论

这篇文章主要介绍了详解linux正则表达式£¨基础正则表达式+扩展正则表达式£©的相关知识£¬非常不错£¬具有一定的参考借鉴价值 ,需要的朋友可以参考下

正则表达式应用非常广泛£¬例如£ºphp£¬Python£¬java等£¬但在linux中最常用的正则表达式的命令就是grep(egrep)£¬sed,awk等£¬换句话 说linux三剑客要想能工作的更高效£¬就一定离不开正则表达式的配合¡£

1¡¢什?#35789;?#27491;则表达式£¿

简单的说£¬正则表达式就是为处理大量的字符串而定义的一套规则和方法¡£通过定义的这些特殊符号的辅助£¬系统管理?#26412;?#21487;以快速过滤¡¢替换或者输出需要的字符串¡£linux正则表达式一般以行为单位处理的¡£

2¡¢为什么要学正则表达式

在企业工作中£¬我们每天做的linux运维工作中£¬时刻都会面?#28304;?#37327;带有字符串的文本配置¡¢程序¡¢命令输出及日志文件等£¬而我们经常会有迫切的需要从大量的字符串内容中查找符合工作需要的特定字符串£¬这就要靠正则表达式£¬因此£¬可以说正则表达式就是为过滤这样字符串的需求而生的£¡

3¡¢容易混淆的两个注意事项£º

1)linux正则表达式一般是以行为单位处理的¡£

2)正则表达式和我们常用的通配符特殊字符是有本质区别的£¬例如£ºls *.txt 这里的*就是通配符£¨表示所有£©£¬不是正则表达式¡£

注意字符集问题£º

确保字符集£ºexport LC_ALL=C

---------------------------------------------

基础正则表达式+扩展正则表达式含义解释£º

---------------------------------------------

.   代表且只能代表?#25105;?#19968;个字符£¨不包括空行£©
*   重复前面?#25105;?个或多个字符
.*   匹配所有字符¡££¨包括空行£©
sed -ri 's#(.*)#\1#g' bqh.txt
把前面正则匹配的括号内的结果£¬在后面用\1取出来操作¡£
^   表示以什么开头£¬^bqh 以bqh开头
$   是以什么结尾
^$   表示空行¡£
\ 例\.   就只代表点本身£¬转义符号£¬让有着特殊身份移动的字符£¬脱掉马甲£¬还原原型\$
^.*   以?#25105;?#22810;个字符开头¡£
.*$   以?#25105;?#22810;个字符结尾¡£
(.*)   从第一字符匹配£¬到空格停止£¬
[abc]   匹配字符集合内的?#25105;?#19968;个字符¡¾a-zA-Z¡¿
[^abc]   匹配不包括^后的?#25105;?#23383;符的内容£»中括号里的^为取反£¬注意和以...开?#38750;?#21035;¡£
a\{n,m\}   重复n到m次£¬前一个重复的字符¡£如果有用egrep/sed -r 可以去掉斜线¡£
\{n,\}   重复至少n次£¬前一个重复的字符¡£如果有用egrep/sed -r 可以去掉斜线¡£
\{n\}   重复n次£¬前一个重复的字符¡£如果有用egrep/sed -r 可以去掉斜线¡£
¢Ù^word   搜索以word开头的£»vi ^ 一行的开够
¢Úword$   搜索以word结尾的£»vi $ 一行的开头
¢Û^$   表示空行¡£
扩展的正则表达式£ºERP£¨egrep或grep -E)

+   重复一个或一个以上前面的字符
£¿ 复0个或一个0前面的字符
|   用或的方式查找多个符合的字符串
()  ?#39029;ö¡?#29992;户组¡±字符串

实战举例£º

^m 搜索以m开头的

 

p$搜索以p结尾的

 

^$表示空号

 

去掉空行£ºgrep ¨Cv ¡°^$¡± bqh.log

查看去掉的后的空?#24515;?#23481;£ºgrep -vn ¡°^$¡± bqh.log 

 

.   代表且只能代表?#25105;?#19968;个字符£¨不包括空行£©


查找带0的字符£º


.*   匹配所有字符¡££¨包括空行£©


查找以.结尾的字符£º

错误方法£ºgrep ".$" bqh.log

正确方法£º

grep ¡°\.$¡± bqh.log 


注意£º\. 就只代表点本身£¬转义符号£¬让有着特殊身份移动的字符£¬脱掉马甲£¬还原原型\$

*   例1*重复1个或多个前面的一个字符¡£

grep ¨Co ¡°1*¡± bqh.log  //-o精确匹配

^.*      以?#25105;?#22810;个字符开头¡£

.*$      以?#25105;?#22810;个字符结尾¡£


[abc]    匹配字符集合内的?#25105;?#19968;个字符¡¾a-zA-Z¡¿

匹配字符集合内的a-z?#25105;?#19968;个小写字符£º

[^abc] 匹配不包括^后的?#25105;?#23383;符的内容£»中括号里的^为取反£¬注意和以...开?#38750;?#21035;


匹配非数字的?#25105;?#23383;符£º

a\{n,m\}  重复n到m次£¬前一个重复的字符¡£如果有用egrep/sed -r /grep -E可以去掉斜线¡£


\{n,\}    重复至少n次£¬前一个重复的字符¡£如果有用egrep/sed -r 可以去掉斜线¡£


\{n\}    重复n次£¬前一个重复的字符¡£如果有用egrep/sed -r 可以去掉斜线¡£


注意£ºegrep£¬grep -E或sed -r过滤一般特殊字符可以不转义¡£多使用参数¡£

 ---------------------------------------------------------------------------------

扩展的正则表达式£ºERP£¨egrep或grep -E)

+   重复一个或一个以上前面的字符

£¿  复0个或一个0前面的字符

|   用或的方式查找多个符合的字符串

()  ?#39029;ö¡?#29992;户组¡±字符串

总结

以上所述是小编给大家介绍的详解linux正则表达式£¨基础正则表达式+扩展正则表达式£©£¬希望?#28304;?#23478;有所帮助£¬如果大家有任?#25105;?#38382;请给我留言£¬小编会及时回复大家的¡£在此也非常?#34892;?#22823;家对脚本之家网站的支持£¡

相关文章

最新评论

ÁÉÄþ35Ñ¡7¿ª½±½á¹û