使用正则表达式仅匹配5xx

时间:2012-09-06 08:50:26

标签: regex bash grep

我想找到500-599之间的所有数字。我对正则表达式很新,我想出了这个:

5[0-9][0-9]+

此工作正常,匹配566,577,500。但它也匹配6578。我不想要的。

编辑:

这是我的文件内容:

asd 554
sad
sads

dsa


456

sa
d

dsa
asda
d500
521
519 asdasd
524 asdasdsdsadsdasd sadsadsadasdsd asdsa dsa dsadsad sad asdas dsa sad sad asds a 543

许多建议我尝试过:

grep "^5[0-9]{2}$" test

根本找不到任何数字!

如何对此加约束?

4 个答案:

答案 0 :(得分:4)

使用grep,最简单的方法是使用-w仅匹配整个单词:

grep --color=always -w "5[0-9][0-9]" test

答案 1 :(得分:3)

如果您想在一条线上匹配5xx ,而不是 5xx 作为 x5xx 的一部分时匹配,

^5\d{2}$
  

\ d =数字

     

^ =行的开头

     

$ =行尾

修改

\s*5\d{2}\s是你应该使用的。匹配5xx两侧的空格。

答案 2 :(得分:1)

删除+号:

5[0-9][0-9]

这将匹配两个数字后面的“5”,而不是其他任何内容。

答案 3 :(得分:0)

您必须更准确地描述您想要发生的事情,例如: 6578?如果您想在输出中输入578(因为" 6" 字符序列与您的格式5xx相匹配),您只需执行

grep -o "5[0-9][0-9]"

请注意,与其他答案不同,-o标志会在需要时从一行发出多个数字。

另一方面,如果您想匹配格式为5xx的单词,您也可以添加-w标志:

grep -o -w "5[0-9][0-9]"

对于更复杂的匹配规则,您希望使用-E标志,并使用更复杂的正则表达式。