给出输入
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)。是否有“正确的方法”来获得一致的行为?
答案 0 :(得分:9)
是的,2.5.1的-o
处理是错误的:
http://www.mail-archive.com/bug-grep@gnu.org/msg00993.html
Grep可能不适合这个; sed
或tr
甚至perl
可能会更好,具体取决于实际任务。
答案 1 :(得分:2)
你可以使用shell。它更快
$ str=abc123def
$ echo ${str//[a-z]/}
123
答案 2 :(得分:2)
我遇到了同样的问题,发现该机器上安装了egrep
。一个快速的解决方案是使用
echo abc123def | egrep -o '[0-9]*'
答案 3 :(得分:0)
答案 4 :(得分:-1)
因为您正在使用正则表达式,所以您必须使用: