我有一个格式的文件,其中每一行都有空格分隔的双号,例如:
1 -0.5 0.567 0.123
以这种格式查找不的文件的正确方法是什么?我试过了:
[^0123456789\.\-\s]
但它没有用,有什么帮助吗?
答案 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
(换行符)包含在此中,所以几乎每行都会得到匹配。
可能匹配“正确”的唯一文件可能包含无效的最后一行,但不包括换行符。