正则表达式查找除了特定数字之外没有数字模式的所有行

时间:2015-03-11 15:39:42

标签: regex grep

我在regexp和grep命令方面有一些经验,但无法找到一种方法来执行以下操作。

让我想象一下我有以下文本文件:

abc 123 cdf
aze ert
vfg 12 gj
zrr 345 rty
top flg 567
aze 345 odi

我需要获得包含' 345'和没有其他数字的行匹配patern [0-9] {3}所以它会返回:

aze ert
vfg 12 gj
zrr 345 rty
aze 345 odi

的问候,
X

4 个答案:

答案 0 :(得分:1)

您可以尝试下面的内容。

grep -P '\b345\b|^(?!.*\b\d{3}\b)' file

\b345\b匹配最初包含数字345的行。

(?!.*\b\d{3}\b)否定前瞻断言我们要匹配的行不会包含三位数字。如果是,则它将匹配该特定行的开头。仅-P将打印所有匹配的行。

答案 1 :(得分:1)

如果您使用-P(perl)选项,则需要前瞻性,grep支持:

grep -P "\b345\b|^(?!.*\b[0-9]{3}\b)"

请参阅demo

答案 2 :(得分:0)

^.*?345.*$|^(?!(?:.*\d){3,}).*$

使用grep -P尝试此操作。请参阅演示。

https://regex101.com/r/iS6jF6/4

答案 3 :(得分:0)

非常感谢大家!从来没有听说过关于消极的前瞻。

所以,进一步解释并给出更简单的正则表达式:

grep -P'345 | ^(?!。* [0-9] {3})'文件

-P是使用perl风格的regexp(支持前瞻) ?!是否定前瞻表达

感谢。