我想找到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
根本找不到任何数字!
如何对此加约束?
答案 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
标志,并使用更复杂的正则表达式。