Linux-grep及正则表达式

文本查找的需要:
grep,egrep,fgrep
grep:根据模式,搜索文本,并将符合模式的问本行显示出来、
模式(Pattern):文本字符和正则表达式的元字符组合而成的匹配条件
格式:grep [option] PATTERN file...
-i
--color
-v:显示没有被模式匹配到的行
-o:只显示被模式匹配到的串
-E:使用扩展正则表达式 =egrep
-A n:匹配行的after n行
-B n:匹配行的before n行
-C n:匹配行的前后 n行
对比之前学过的globbing:
*,?,[],[^]
man 7 glob


正则表达式:Regular Expression,REGEXP
注意:grep是整行的部分匹配(最长匹配),显示整行


正则表达式分类:
1、Basic REGEXP:基本
2、Extended REGEXP:扩展




元字符:
.表示匹配单个任意字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:[:space:][:digit:],[:lower:]...


匹配次数:
*:匹配其前面的字符任意次
 a*b
 a,b,ab,aab




.*:任意长度的任意字符
?:匹配其前面的字符1次或0次(一般要加一个转译字符\?)
\{m,n\}:匹配其前面的字符至少m次,至多n次


位置锚定:
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符后面的任意内容必须出现在行尾
eg:grep '^a.*a$' test.txtt #以a开头和结尾的行
^$:空白行


\<或\b:其后面的任意字符必须作为单词首部出现
\>或\b:其前面的任意字符必须作为单词的尾部出现 
eg:\<root\>:单词必须是root,rootroot也不行


分组:
\(\)
eg:\(ab\)*,ab可以出现任意次 




分组还有一个重要的用法是实现后向引用:
\1:引用第一个括号分组




扩展的正则表达式:
字符匹配:
.
[]
[^]


次数匹配:
*
?:不用\
+:匹配其前面的字符至少1次
{m,n}


位置锚定:
^
$
\<
\>


分组:
():分组
\1,\2,\3...


或者
|:表示or


练习:
匹配1-255的数字
egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>' test.txt


匹配255.255.255.255这样类型的数字串
egrep '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>\.){3}(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>\.)' test.txt


为什么不可以后面引用呢?


fgrep:不支持正则表达式,但是执行速度快



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值