Regular expressions come in many different flavours. What you are showing is a Perl-like regular expression (PCRE, "Perl Compatible Regular Expression").
grep does POSIX regular expressions. These are basic regular expressions (BRE) and extended regular expressions (ERE, if
grep is used with the
-E option). See the manual for
regex or whatever similar manual your
grep manual refers to on your system, or the POSIX standard texts that I just linked to.
If you use GNU
grep, you would be able to use Perl-like regular expressions if you used
grep with the GNU
Also note that
grep returns lines by default, not substrings from lines. Again, with GNU
grep (and some other
grep implementations), you may use the
-o option to get only the bit(s) that matches the given expression from each line.
Note that both
-o are non-standard extensions the POSIX specification of
If you are not using GNU
grep, then you may use
sed instead to get the bit between the string
prefix and the end of the line:
sed -n 's/.*prefix\(.*\)/\1/p' file
What this does is to only print the lines that
sed manages to apply the given substitution to. The substitution will replace the whole line that matches the expression (which is a BRE), with the piece of it that occurs after the string
Note that if there are several instances of
prefix on a line, the
sed variation would return the string after the last one, while the GNU
grep variation would return the string after the first one (which would include the other instances of
sed solution would be portable to all Unix-like systems.