0

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

我需要从命令中提取一些输出

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

我需要 grep 格式的一些信息

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 删除它....

4

3 回答 3

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]+'
于 2012-07-12T21:05:44.113 回答
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]+'

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

于 2012-07-12T21:06:51.010 回答
1

这应该工作

cmd | grep -E '([0-9]+:){3}[0-9]+'
于 2012-07-12T21:11:49.380 回答