正则表达式匹配非数字

时间:2010-11-02 17:23:10

标签: regex

我有一个格式的文件,其中每一行都有空格分隔的双号,例如:

1 -0.5 0.567 0.123 

以这种格式查找的文件的正确方法是什么?我试过了:

[^0123456789\.\-\s]

但它没有用,有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

以下适用于我:

> grep '[^0123456789\. \-]' *

但请注意,此方法不会通知您格式错误。例如:

1 -1.0.4 .012

与您指定的格式不同,但不匹配。

编辑:看起来您也可以使用[:space:]字符类。

> grep '[^0123456789\.[:space:]\-]' *

编辑:遵循相同的逻辑,您可以使用[:digit:]字符类。

> grep '[^[:digit:]\.[:space:]\-]' *

答案 1 :(得分:0)

尝试

$ grep -LP '^[\s\d.\-]+$' file1 file2 file3 file4 

这实际上意味着

$ grep --files-without-match --perl-regexp '^[\s\d.\-]+$' file1 file2 file3 file4

答案 2 :(得分:0)

仔细检查后它与\s不兼容的原因是因为\s匹配任何空格字符。哪个等同于[ \t\r\n](尽管某些风格可能包括其他非打印字符)。因为\n(换行符)包含在此中,所以几乎每行都会得到匹配。

可能匹配“正确”的唯一文件可能包含无效的最后一行,但不包括换行符。