Matthias
Matthias

Reputation: 7521

Regex to get delimited content with egrep

I would like to get the parameter (without parantheses) of a function call with a regular expression.

I am using egrep in a bash script with cygwin.

This is what I got so far (with parantheses):

$ echo "require(catch.me)" | egrep -o '\((.*?)\)'
(catch.me)

What would be the right regex here?

Upvotes: 2

Views: 2415

Answers (3)

http://www.greenend.org.uk/rjk/2002/06/regexp.html

What are you looking for - is a lookbehind and lookahead regular expressions.

Egrep cannot do that. grep with perl support can do that.

from man grep:

 -P, --perl-regexp
          Interpret PATTERN as a Perl regular expression.  This is highly experimental and grep -P may warn of unimplemented features.

So

$> echo "require(catch.me)" | grep -o -P '(?<=\().*?(?=\))'
catch.me

Upvotes: 11

jaypal singh
jaypal singh

Reputation: 77095

If you can use sed then the following would work -

echo "require(catch.me)" | sed 's/.*[^(](\(.*\))/\1/'

You can modify your existing regex to this

echo "require(catch.me)" | egrep -o 'c.*e'

Even though egrep offers this (from the man page)

-o, --only-matching
              Show only the part of a matching line that matches PATTERN.

It isn't really the correct utility. SED and AWK are masters at this. You will have much more control using either SED or AWK. :)

Upvotes: 4

Colin Hebert
Colin Hebert

Reputation: 93167

From the manual :

   grep, egrep, fgrep - print lines matching a pattern

Basically, grep is used to print the complete line, so you won't do anything more.

What you should do is using another tool, maybe perl, for such operations.

Upvotes: -1

Related Questions