Matt
Matt

Reputation: 5684

How do I form the correct regular expression to capture everything before parentheses?

current I have a set strings that are of the format

customName(path/to/the/relevant/directory|file.ext#FileRefrence_12345)

From this I could like to extract customName, the characters before the first parentheses, using sed.

My best guesses so far are:

echo $s | sed 's/([^(])+\(.*\)/\1/g'
echo $s | sed 's/([^\(])+\(.*\)/\1/g'

However, using these I get the error:

sed: -e expression #1, char 21: Unmatched ( or \(

So how do I form the correct regular expression? and why is it relevant that I do not have a matched \( is it is just an escaped character for my expression, not a character used for formatting?

Upvotes: 0

Views: 78

Answers (3)

fedorqui
fedorqui

Reputation: 289635

Different options:

$ echo $s | sed 's/(.*//'            #sed (everything before "(")
customName
$ echo $s | cut -d"(" -f1            #cut (delimiter is "(", print 1st block)
customName
$ echo $s | awk -F"(" '{print $1}'   #awk (field separator is "(", print 1st)
customName
$ echo ${s%(*}                       #bash command substitution
customName

Upvotes: 1

Kent
Kent

Reputation: 195049

grep

kent$  echo "customName(blah)"|grep -o '^[^(]*'
customName

sed

kent$  echo "customName(blah)"|sed 's/(.*//'   
customName

note I changed the stuff between the brackets.

Upvotes: 2

iruvar
iruvar

Reputation: 23364

you could substitute everything after the opening parenthesis, like this (note that parentheses by default do not need to be escaped in sed)

echo 'customName(path/to/the/relevant/directory|file.ext#FileRefrence_12345)' |
sed -e 's/(.*//'

Upvotes: 2

Related Questions