views:

34

answers:

1

I am relative new to shell scripting and sed. I need to substitute a pattern, globably, but I also need to remember (or save) part of the pattern and use it later in the same substitute command. The saved pattern will be varible, so I need to use a wild card. For example,

input message=trt:GetAudioSourcesRequest/>

and I want to end up with something like

input message=trt:GetAudioSourcesRequest PAUL/GetAudioSourcesRequest/>

but the function string "GetAudioSourcesRequest" will change (in length also) throughtout the file, so I need a wild card, e.g.

sed -i "s/input message=trt:<wild card in here>/>/input message=trt:<print wild card> PAUL/<print wild card>/>

I have managed to get the following command to nearly do what I want but it is too rigid. It only stores a 4 syllable pattern so if I have a function name such as GetProfileRequest, this doesn't work

echo "input message=\"trt:GetAudioSourcesRequest\"/>" | sed 's/input message=\"trt:\([A-Z][a-z]*\)\([A-Z][a-z]*\)\([A-Z][a-z]*\)\([A-Z][a-z]*\).*/input message=\"trt:\1\2\3\4\ PAUL\/\1\2\3\4"\/\>/g'

This outputs

input message="trt:GetAudioSourcesRequest PAUL/GetAudioSourcesRequest"/>

Which is ok but when I use GetProfileRequest this doesn't.

I have come accross \W and [^[:alnum:]] or [[:alnum:]] but I don't how to use them

Thanks in advance.

A: 
sed 's|\(input message=trt:\)\([^/]*\)|\1\2 PAUL/\2|'
Ignacio Vazquez-Abrams
It doesn't seem to be working. My full command,echo "input message=\"trt:GetAudioSourcesRequest\"/>" | sed 's|\(input message=trt:\)\([^/]*\)|\1\2 PAUL/\2|'the outputinput message="trt:GetAudioSourcesRequest"/>I don't think its executing the sed
Paul
Oh, I found my problem. I was missing a double quotes.Thanks
Paul