我在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
答案 0 :(得分:1)
您可以尝试下面的内容。
grep -P '\b345\b|^(?!.*\b\d{3}\b)' file
\b345\b
匹配最初包含数字345的行。
(?!.*\b\d{3}\b)
否定前瞻断言我们要匹配的行不会包含三位数字。如果是,则它将匹配该特定行的开头。仅-P
将打印所有匹配的行。
答案 1 :(得分:1)
答案 2 :(得分:0)
答案 3 :(得分:0)
非常感谢大家!从来没有听说过关于消极的前瞻。
所以,进一步解释并给出更简单的正则表达式:
grep -P'345 | ^(?!。* [0-9] {3})'文件
-P是使用perl风格的regexp(支持前瞻) ?!是否定前瞻表达
感谢。