为什么grep显示不匹配的行?

时间:2014-04-22 05:00:15

标签: regex grep

我正在尝试打印出至少一个非数字字符的所有行。

我的grep代码如下所示:grep '[^[:digit:]]' GTEST

GTEST在哪里:

TEST 
55 55 Pink
123
sss
aaa
ss aaa ss
a 1 b 2 a b a 
Doop Dap
12 13
77a
59360

输出正是GTEST中的输出,除了线的匹配部分(AKA所有的字母字符)都是红色的。而不是以红色显示匹配的字符,我/只/想要打印出包含匹配字符的行。

我一直在寻找grep标签(-o,-w等),但似乎没有人为我做这些。

我错过了什么吗?

编辑:

预期输出为:

TEST 
55 55 Pink
sss
aaa
ss aaa ss
a 1 b 2 a b a 
Doop Dap
77a

1 个答案:

答案 0 :(得分:3)

根据您的数据,我得到了这个输出:

grep '[^[:digit:]]' file
TEST
55 55 Pink
sss
aaa
ss aaa ss
a 1 b 2 a b a
Doop Dap
12 13
77a

您获得12 13,因为1213之间的空格是非数字字符。
如果您在数字之前或之后有空格,这也会给出输出,例如:123<space>

为了克服这个问题,你可以这样做:

grep '[^[:digit:] ]' file
TEST
55 55 Pink
sss
aaa
ss aaa ss
a 1 b 2 a b a
Doop Dap
77a

甚至更好:

grep '[^[:digit:][:blank:]]' file