echo abc123def | grep -o '[0-9]*'
在一台计算机(与GNU grep的2.5.4),这将返回123
,并在另一个(与GNU grep的2.5.1),它返回一个空字符串。有没有解释为什么grep 2.5.1在这里失败,还是只是一个错误?我使用grep -o
这种方式在一个bash脚本中,我希望能够在不同的计算机(可能有不同版本的grep)上运行。是否有“正确的方法”来获得一致的行为?
echo abc123def | grep -o '[0-9]*'
在一台计算机(与GNU grep的2.5.4),这将返回123
,并在另一个(与GNU grep的2.5.1),它返回一个空字符串。有没有解释为什么grep 2.5.1在这里失败,还是只是一个错误?我使用grep -o
这种方式在一个bash脚本中,我希望能够在不同的计算机(可能有不同版本的grep)上运行。是否有“正确的方法”来获得一致的行为?
是,2.5.1的-o
处理是越野车: http://www.mail-archive.com/[email protected]/msg00993.html
grep的大概不是这个合适的工具; sed
或甚至perl
可能会更好取决于实际任务是什么。
你可以使用shell。其更快
$ str=abc123def
$ echo ${str//[a-z]/}
123
我有同样的问题,发现egrep
安装在该机器上。一个快速的解决方案是使用
echo abc123def | egrep -o '[0-9]*'
由于您使用的是正则表达式,所以你必须使用:
祝你好运!
-E/egrep是* extended *正则表达式所必需的; '[0-9] *'是一个有效的基本正则表达式。 ('grep'中的're'代表正则表达式)。也许2.5.1中的错误并不存在于扩展的正则表达式支持中,但仅使用正则表达式的事实并不意味着您需要-E。 – chepner 2012-07-27 23:53:45
为什么你想要一个可以匹配零个字符的正则表达式呢?我希望它匹配每一行,而不仅仅是数字的行。 – 2009-11-15 03:58:14