48
12
Is it possible to use GNU grep to get a matched group from an expression?
Example:
echo "foo 'bar'" | grep -oE "'([^']+)'"
Which would output "'bar'". But I would like to get just "bar", without having to send it through grep one more time (ie. get the matched group). Is that possible?
1@jtbandes: You don't need the extended features for this expression.. I just requires 3 escape characters for
( ) +
use\( \) \+
: This is effectively the same:sed "s/.*'\([^']\+\)'.*/\1/"
– Peter.O – 2012-01-11T01:38:38.7173This doesn't work for multiline input. For that you need:
sed -n "s/.*'\([^']\+\)'.*/\1/p"
– phreakhead – 2012-10-10T18:15:51.513Thanks, had forgotten about sed. But to clarify, sed doesn't take the argument -E.. – Torandi – 2009-07-22T23:36:22.197
1Hm, it does on my machine (Mac OS X). Upon further examination, in the man page: "The -E, -a and -i options are non-standard FreeBSD extensions and may not be available on other operating systems." – jtbandes – 2009-07-22T23:40:06.057
Okay, it doesn't on mine (debian), what is -E supposed to do? – Torandi – 2009-07-22T23:42:50.280
1It's similar to
grep
's -E: "Interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's). The re_format(7) manual page fully describes both formats." – jtbandes – 2009-07-22T23:44:06.2031-r seems to to that for me. – Torandi – 2009-07-22T23:46:16.650
And I don't have -r. Oh well! – jtbandes – 2009-07-22T23:49:53.430