使用GREP和REGEX遇到了问题

3

我有一个文本文件,其中以以下格式存储了四个数字的组合:

Num1,Num2,Num3,Num4
Num5,Num6,Num7,Num8
.............

我有很多这样的文件,我需要用grep命令搜索包含上面描述的模式的所有文件名。

我的grep命令构建如下:

grep -l "{d+},{d+},{d+},{d+}" /some/path/to/file/name

grep命令没有返回任何内容。

有人能指出我的grep语句可能哪里出错了吗?

谢谢

3个回答

2
这应该符合您的要求:

这应该符合您的要求:

egrep -l '[[:digit:]]+,[[:digit:]]+,[[:digit:]]+,[[:digit:]]+' /some/path/to/file/name

太棒了!它运行起来了。你有没有碰巧知道我使用的语法有什么问题? - sc_ray
2
{d+}并不意味着“匹配至少有一个数字的任何数字”。在perl类型的正则表达式(grep -P)中,应该使用\d+。使用扩展正则表达式(grep -E,egrep),[0-9]+[[:digit:]]+表示相同的含义。使用基本正则表达式(grep),您可以使用[0-9][0-9]*来获得相同的结果。 - bmk

2

一种方法是使用 perl 正则表达式:

grep -Pl "\d+,\d+,\d+,\d+" /some/path/to/file/name

在你的语法中,d是字面量。它应该转义那个字母,但是grep正则表达式不接受。


-1

没有其他的选择,我最终得到了这个结果(grep -P 对我不起作用)

grep "\d\+,\d\+,\d\+,\d\+"

以某种方式,使用grep正则表达式需要转义更多字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接