Linux学习笔记:正则表达式


1、正则表达式的注意事项(至少在macbook环境下是这样)

Linux命令中,正则表达式可以直接给出打,也可以使用单引号或者双引素号包着,比如下搭面的三条命令都有一样的seven效果。

grep a. project_log
grep 'a.' project_log
grep "a." project_log

他们都是在project_log文件中搜索a和任意字符组成的字符串

但是在强烈建议使用单引号或者双引号包着正则大表达式。因为只有在这种情酥况下,正则表达式达中的转义字符\才有效。

比如grep a\. project_loggrep a. project_log效果一样,转移字符直接被忽略了。

grep 'a\.' project_log则是只搜索a.



2、正则表达式

2.1、替换类

替换类seven是指像任意一个字符,任意n个字符,一个数字,一个字母之类的,只与字符有关的表达式。

字符说明示例
*匹配0个或多个*前的一个字符比如a*b,那可以匹配到ab,aaaaab,eeeb,efoaab等。
.匹配一个且只有一个任意字符,该字符可以是空格比如a.,可以答匹配到abaca(接一个空格)等,但是不能匹配到在行尾的a
[abc][]中是字符集(不是字符串集),匹配一个字符集中的任意一个字符。比如[abc],可以匹配dfojakjiebkc
[^abc][abc]类似,其中的^是取反,表示匹配除字符集以外的其它字符。比如[^abc],可以匹配dfojakjiebkc。
a\{n,m\}{n,m}表示重复前一个字符n到m次,两边都是闭区间。总的来说,该表达式匹配重复n到m次a的字符串。要注意到,Linux命令中{}属于普通字符,要想让他们被当成运算符需要加上转义字符。比如a\{3,5\}会匹配eoaaaadkoen,aaaaaoekfoa。
a\{n,\}这个表示匹配至少重复n次a的字符串,与a\{n,m\}一样需要加上转义符。比如a\{3,\}匹配aakewaaa
a\{n\}匹配由n个a组成的字符串,与a\{n,m\}一样需要加上转义符。比如a\{3\}匹配aakaaaooeaaaaa。
+拓展类正则,对于这类正则grep等命令需要加上-E后这些运算符才大能生苏效打。匹配一个或多个前一个字符,这个字符可以是其它正则运算符。比如a+匹配efaonaaa。而.+匹配所有内容,除了空行。
?拓展类正则。匹配0个或多个前一个字符,这个字符可以是正则运算符。ro?t匹配rtoerotkrooot
|拓展类正则。或符号。连接两个正则表达式,符合两个中任意一个正则的内容都会匹配成功ac|bc匹配aacoekbabc
()和数学中的括号一样(ac|bc)n匹配acacnbcbcn
[0-9]表示任意一个数字,范围看缩小[0-9]koe匹配1koe···,0koe9koe```等。
[a-Z]匹配任意一个字母,大写小写都匹配,这个范围可继续缩小[a-Y]匹配除大写Z以外的所有字母。



2.1.1、字符类的匹配原则

像这类匹配字符的有一个原则,任意两个匹配内容不会重复。

比如用a\{2\}来查找这行文本eoaaaeo。执行以下代码。

grep 'a\{2\}' project_log --color=always

查找结果如下
在这里插入图片描述
我们可以看到,系统只匹配了三个a中的前面两个a。不会存在匹配到前面两个a之后,又去匹配由中间的a和第三个a组成的字符串。任意两个字符串之间是不会有交集的。



2.2、位置类

位置类是指以···开头,以···结尾的之类的,与位置有关的表达式

字符说明示例
^匹配以^后接的字符串为开头的行。^后可以接其它正则。比如^a,可以匹配到以a为开头的行。^ab可以匹配到以ab为开头的行。^a*b.c则是匹配以0个或多个a开头,后接一个b,一个任意字符,一个c的字符串为开头的行。
$匹配$前接的字符串为结尾的行,这个字符串可以是正则。比如a$可以匹配到所有以a为结尾的行。ab$可以匹配到以ab为结尾的行。a*b.c$则是匹配以0个或多个a开头,后接一个b,一个任意字符,一个c的字符串为结尾的行。



2.2.1、^ 和 $ 同时使用

这里我觉得有个示例说明会好一些。假设project_log文件中有下面一行内容。

eodkolkfowjploldfqp

执行下列命令,查找以eod开头,接0个或多个字符,以j为结尾的字符串为开头的行

grep '^eod.*j' project_log --color=always

查找结果如下

在这里插入图片描述

执行一列命令,查找以lo开头,任意0个或多个字符,最后以字符p结尾的字符串结尾的行

grep 'lo.*p' project_log --color=always

查找结果如下

在这里插入图片描述

如果^$同时使用的话,比如^ac*b$,这个表示查找以a开头,0个或多个c,b结尾的字符串为开头,同时也大是苏打结尾的行。


3、常用的正则

-------- | ----- | ----
匹配所有字符(包括空行) | .*
匹配所有字符(不包括空行) | .+
匹配空行 | ^$

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值