为什么这个`grep -o`失败了,我该如何解决呢?

Ant*_*nko 9 regex bash grep

鉴于输入

echo abc123def | grep -o '[0-9]*'
Run Code Online (Sandbox Code Playgroud)

在一台计算机上(使用GNU grep 2.5.4),这将返回123,而在另一台计算机上(使用GNU grep 2.5.1),它返回空字符串.有没有解释为什么grep 2.5.1在这里失败,或者它只是一个错误?我grep -o在这个方式中使用bash脚本,我希望能够在不同的计算机上运行(可能有不同版本的grep).是否有"正确的方法"来获得一致的行为?

Gra*_*dpa 9

是的,2.5.1的-o处理是错误的:http: //www.mail-archive.com/bug-grep@gnu.org/msg00993.html

Grep可能不适合这个; sed或者tr甚至perl可能更好,这取决于实际任务是什么.