用于查找此格式数的正则表达式num:num:num:num

时间:2012-07-12 20:47:21

标签: regex linux bash shell

我知道这是基本的,但我不确定,我哪里出错了,从来没有写过正则表达式..

我需要从命令

中获取一些输出
cmd | grep '[0-9]+:[0-9]+:[0-9]+:[0-9]+'

我需要格式化一些格式的信息

dummy dummy 4:9:93:022 dummy 

我该怎么做?请让我知道我哪里出错......

输出格式为

`-+- policy='round-robin 0' prio=2 status=active
|- 6:0:0:136 sdip 135:144 active ready running
`- 5:0:0:136 sdle 67:448  active ready running

我只需要根据6:0:0:136 ....

删除它

3 个答案:

答案 0 :(得分:3)

加号修饰符是“扩展正则表达式”语法的一部分。这样:

a+

表示“一个或多个'a'字符”,是此基本表达式的简写:

aa*

传统上grep支持基本正则表达式,egrep支持扩展语法。所以这样做:

cmd | egrep '[0-9]+:[0-9]+:[0-9]+:[0-9]+'

或者这(这是同一件事):

cmd | grep -E '[0-9]+:[0-9]+:[0-9]+:[0-9]+'

答案 1 :(得分:3)

您需要使用反斜杠转义每个+,或使用扩展的正则表达式选项(-E--extended-regexp):

cmd | grep '[0-9]\+:[0-9]\+:[0-9]\+:[0-9]\+'

或:

cmd | grep -E '[0-9]+:[0-9]+:[0-9]+:[0-9]+'
  

基本与扩展正则表达式
         在基本正则表达式中,元字符?+{|()失去了它们的特殊含义;而是使用反斜杠版本\?\+\{\|\(\)

答案 2 :(得分:1)

这应该有效

cmd | grep -E '([0-9]+:){3}[0-9]+'