如何在GNU版本上使用正则表达式和grep?

时间:2016-09-07 16:46:20

标签: unix grep

我的文字文件包含以下内容:

Bought line for campaign : 8326197571 on provider TEST
Bought line for campaign : 3326147521 on provider TEST

只想使用grep电话号码从此文件获取,请尝试使用:

grep -oh '\d\{10\}' test.txt

在我的上面,它在服务器上运行完美无效。但是,如果我只是尝试:

grep '\d*' test.txt

它返回带有数字的所有字符串。

服务器grep版本

grep --version
grep (GNU grep) 2.5.1-FreeBSD

Mac版

grep (BSD grep) 2.5.1-FreeBSD

看起来像GNU和BSD不同的问题,但如何在GNU上运行?

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用[[:digit:]]代替\d来表示字符类:

$ grep -oh '[[:digit:]]\{10\}' <<< 'Bought line for campaign : 8326197571 on provider TEST
Bought line for campaign : 3326147521 on provider TEST'
8326197571
3326147521

或者,您可以使用-P启用Perl样式的正则表达式来保留原始表达式(但不会转义大括号):

grep -ohP '\d{10}'