tags:

views:

225

answers:

3

Given the input

echo abc123def | grep -o '[0-9]*'

On one computer (with GNU grep 2.5.4), this returns 123, and on another (with GNU grep 2.5.1) it returns the empty string. Is there some explanation for why grep 2.5.1 fails here, or is it just a bug? I'm using grep -o in this way in a bash script that I'd like to be able to run on different computers (which may have different versions of grep). Is there a "right way" to get consistent behavior?

+5  A: 

Yes, 2.5.1's -o handling was buggy: http://www.mail-archive.com/[email protected]/msg00993.html

Grep is probably not the right tool for this; sed or tr or even perl might be better depending on what the actual task is.

Grandpa
+1: But if there's variation between minor GNU `grep` versions (albeit due to bugs) there's not much chance of finding consistency between different computers. There are plenty of other tools, though.
pavium
A: 

This will give similar results:

echo abc123def | sed -n 's/[^0-9]*\([0-9]\+\).*/\1/p'

Your question is a near-duplicate of this one.

Dennis Williamson
+1  A: 

you can use the shell. its faster

$ str=abc123def
$ echo ${str//[a-z]/}
123
ghostdog74