3

我想找到介于 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

4 回答 4

6

如果您只想在一行上匹配 5xx 而不是在5xx作为x5xx的一部分出现时,

^5\d{2}$

\d = 数字

^ = 行首

$ = 行尾

编辑:

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

于 2012-09-06T08:56:27.440 回答
5

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

grep --color=always -w "5[0-9][0-9]" test
于 2012-09-06T09:18:44.603 回答
1

删除 + 号:

5[0-9][0-9]

这将匹配 "5" 后接两个数字,仅此而已。

于 2012-09-06T08:54:11.600 回答
0

您必须更准确地描述您希望使用 6578 发生什么?如果你想要输出中的 578(因为在“6”之后有一个字符序列匹配你的格式 5xx)你可以简单地做

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

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

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

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

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

于 2018-04-13T12:02:23.517 回答