使用grep查找字符串模式

时间:2010-09-06 13:12:53

标签: regex grep

我正在尝试在几个.txt文件的文本中找到某个序列。我正在寻找一个加到4位数字的字符串。例如Watson1990。我使用在线测试器测试了正则表达式,它似乎工作,但表达式(或它的组合)无法在我的文件上产生输出。

我的正则表达式如下:

egrep '\w*\d{4}' *.txt

然而,它不会产生任何输出。你能告诉我这有什么问题吗?我正在使用OSX(Snow Leopard)。

感谢。

3 个答案:

答案 0 :(得分:5)

正则表达式不起作用的原因是,在扩展正则表达式语法中,标记\d与字母d匹配,而不是数字。改为使用字符类[0-9]

同样\w匹配数字和字母,所以你可能不想在这里使用它。使用字符类[A-Za-z]匹配A-Z或a-z中的字母。

我将*更改为+,因为您可能希望在该数字之前至少有一个字母。 +表示“一个或多个”,而*表示“零或更多”。

最后,您可能希望考虑如果您看到5位数字会发生什么。您的正则表达式当前接受它,因为5位数字以4位数字开头。

总之,试试这个:

egrep '[a-zA-Z]+[0-9]{4}' *.txt

答案 1 :(得分:1)

您的正则表达式使用Perl,而不是扩展的regex组件。尝试

grep -P '\w\d{4}' *.txt

如果您的grep版本具有该选项。我正在使用GNU grep 2.5.1,而-P选项被列为“高度实验性”。

答案 2 :(得分:1)

GNU grep

grep -Po "(\w+\d{4})" file