我有一个文本文件,其中以以下格式存储了四个数字的组合:
Num1,Num2,Num3,Num4
Num5,Num6,Num7,Num8
.............
我有很多这样的文件,我需要用grep命令搜索包含上面描述的模式的所有文件名。
我的grep命令构建如下:
grep -l "{d+},{d+},{d+},{d+}" /some/path/to/file/name
grep命令没有返回任何内容。
有人能指出我的grep语句可能哪里出错了吗?
谢谢
我有一个文本文件,其中以以下格式存储了四个数字的组合:
Num1,Num2,Num3,Num4
Num5,Num6,Num7,Num8
.............
我有很多这样的文件,我需要用grep命令搜索包含上面描述的模式的所有文件名。
我的grep命令构建如下:
grep -l "{d+},{d+},{d+},{d+}" /some/path/to/file/name
grep命令没有返回任何内容。
有人能指出我的grep语句可能哪里出错了吗?
谢谢
这应该符合您的要求:
egrep -l '[[:digit:]]+,[[:digit:]]+,[[:digit:]]+,[[:digit:]]+' /some/path/to/file/name
一种方法是使用 perl
正则表达式:
grep -Pl "\d+,\d+,\d+,\d+" /some/path/to/file/name
在你的语法中,d
是字面量。它应该转义那个字母,但是grep
正则表达式不接受。
没有其他的选择,我最终得到了这个结果(grep -P
对我不起作用)
grep "\d\+,\d\+,\d\+,\d\+"
以某种方式,使用grep正则表达式需要转义更多字符。
{d+}
并不意味着“匹配至少有一个数字的任何数字”。在perl类型的正则表达式(grep -P)中,应该使用\d+
。使用扩展正则表达式(grep -E,egrep),[0-9]+
或[[:digit:]]+
表示相同的含义。使用基本正则表达式(grep),您可以使用[0-9][0-9]*
来获得相同的结果。 - bmk